ThinkPHP表單資料智能寫入create方法執行個體分析_php執行個體

來源:互聯網
上載者:User

本文執行個體講述了ThinkPHP表單資料智能寫入create方法。分享給大家供大家參考。具體如下:

建立資料對象 create()

除了手動構造入庫的資料集之外,ThinkPHP 還提供了自動建立資料對象的 create() 方法。create() 方法將自動收集提交的表單資料並建立資料對象而無需人工幹預,這在表單資料欄位非常多的情況下更具優勢。

將前文寫入表單資料的例子用 create() 來實現:

public function insert2(){ header("Content-Type:text/html; charset=utf-8"); $Dao = M("User"); if($Dao->create()){  $Dao->password = md5($_POST["password"]);  $Dao->regdate = time();  if($lastInsId = $Dao->add()){   echo "插入資料 id 為:$lastInsId";  } else {   echo "資料寫入錯誤!";  } }else{  exit($Dao->getError().' [ <a href="javascript:history.back()">返 回</a> ]'); }}

create() 建立資料對象後,將自動收集提交過來的表單資料。而表單資料可能需要經過一定加工(例如將密碼加密)才能寫入資料表,所以可以對資料對象的成員屬性值根據進行修改或添加去除等。

提示:create() 建立的資料對象存放於記憶體,在執行入庫動作(add() 或 save())之前,都可以進行修改。

在上面的例子裡,create()方法 的行為和 date()方法 是一致。但 date() 方法只是簡單的建立資料對象,但 create() 方法還具備:

① 令牌驗證
② 資料自動驗證
③ 欄位對應支援
④ 欄位類型檢查
⑤ 資料自動完成

等各種進階的資料功能,要完成這些進階資料模型功能,需要使用 D方法 執行個體化資料模型。ThinkPHP 提供了各種驗證與填充規則供調用,具體可參見《ThinkPHP 自動驗證》與《ThinkPHP 自動填滿》相關文章。

自動驗證與自動填滿

在將表單寫入資料表之前,常常會有一些對資料的檢測(提交的使用者名稱是否符合要求)與處理(如例子中的密碼加密以及取得目前時間戳)。create() 方法就支援資料的自動驗證與自動完成。

在 LibModel 目錄下建立 UserModel.class.php 檔案(User 為建立的模型對象,也對應 首碼_user 表),加入自動驗證和自動填滿規則:

class UserModel extends Model{ // 自動驗證設定 protected $_validate = array(  array('username','require','使用者名稱必須填寫!',1),  array('email','email','郵箱格式錯誤!',2),  array('username','','使用者名稱已經存在!',0,'unique',1), ); //自動填滿設定 protected $_auto = array(  array('regdate','time',self::MODEL_INSERT,'function'),  array('password','md5',self::MODEL_INSERT,'function'), );}

將 insert2 操作更改為:

public function insert2(){ header("Content-Type:text/html; charset=utf-8"); $Dao = D("User"); if($Dao->create()){  if($lastInsId = $Dao->add()){   echo "插入資料 id 為:$lastInsId";  } else {   echo "資料寫入錯誤!";  } }else{  exit($Dao->getError().' [ <a href="javascript:history.back()">返 回</a> ]'); }}

如果提交的資料不符合驗證要求(如使用者名稱存在),則 create() 建立資料對象失敗(返回 FALSE ),$Dao->getError() 會列印出自動驗證設定規則裡面設定的提示資訊:使用者名稱已經存在!

如果驗證規則通過後,系統會進行自動填滿設定,將表單密碼進行 MD5 加密以及取得當前的時間戳記填充入 create() 的資料對象。

所以 D方法 配合 create() 是非常智能而強大的,恰當運用可以達到事半功倍快速開發的目的。

提示:

① D 方法配合 create() 由於其功能強大,也就損失了一定的效率,在商務邏輯不複雜的情況下推薦 M方法+data() 模式

② create() 預設接受 POST 資料,若要接受其他類型資料,只需在參數內指定即可,如接受 GET 資料:create($_GET)

更多關於thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》及《ThinkPHP常用方法總結》

希望本文所述對大家基於ThinkPHP架構的php程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.