ThinkPHP表單數(shù)據(jù)智能寫入create方法實(shí)例分析
本文實(shí)例講述了ThinkPHP表單數(shù)據(jù)智能寫入create方法。分享給大家供大家參考。具體如下:
創(chuàng)建數(shù)據(jù)對(duì)象 create()
除了手動(dòng)構(gòu)造入庫(kù)的數(shù)據(jù)集之外,ThinkPHP 還提供了自動(dòng)創(chuàng)建數(shù)據(jù)對(duì)象的 create() 方法。create() 方法將自動(dòng)收集提交的表單數(shù)據(jù)并創(chuàng)建數(shù)據(jù)對(duì)象而無需人工干預(yù),這在表單數(shù)據(jù)字段非常多的情況下更具優(yōu)勢(shì)。
將前文寫入表單數(shù)據(jù)的例子用 create() 來實(shí)現(xiàn):
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 "插入數(shù)據(jù) id 為:$lastInsId"; } else { echo "數(shù)據(jù)寫入錯(cuò)誤!"; } }else{ exit($Dao->getError().' [ <a href="javascript:history.back()">返 回</a> ]'); } }
create() 創(chuàng)建數(shù)據(jù)對(duì)象后,將自動(dòng)收集提交過來的表單數(shù)據(jù)。而表單數(shù)據(jù)可能需要經(jīng)過一定加工(例如將密碼加密)才能寫入數(shù)據(jù)表,所以可以對(duì)數(shù)據(jù)對(duì)象的成員屬性值根據(jù)進(jìn)行修改或添加去除等。
提示:create() 創(chuàng)建的數(shù)據(jù)對(duì)象存放于內(nèi)存,在執(zhí)行入庫(kù)動(dòng)作(add() 或 save())之前,都可以進(jìn)行修改。
在上面的例子里,create()方法 的行為和 date()方法 是一致。但 date() 方法只是簡(jiǎn)單的創(chuàng)建數(shù)據(jù)對(duì)象,但 create() 方法還具備:
① 令牌驗(yàn)證
② 數(shù)據(jù)自動(dòng)驗(yàn)證
③ 字段映射支持
④ 字段類型檢查
⑤ 數(shù)據(jù)自動(dòng)完成
等各種高級(jí)的數(shù)據(jù)功能,要完成這些高級(jí)數(shù)據(jù)模型功能,需要使用 D方法 實(shí)例化數(shù)據(jù)模型。ThinkPHP 提供了各種驗(yàn)證與填充規(guī)則供調(diào)用,具體可參見《ThinkPHP 自動(dòng)驗(yàn)證》與《ThinkPHP 自動(dòng)填充》相關(guān)文章。
自動(dòng)驗(yàn)證與自動(dòng)填充
在將表單寫入數(shù)據(jù)表之前,常常會(huì)有一些對(duì)數(shù)據(jù)的檢測(cè)(提交的用戶名是否符合要求)與處理(如例子中的密碼加密以及取得當(dāng)前時(shí)間戳)。create() 方法就支持?jǐn)?shù)據(jù)的自動(dòng)驗(yàn)證與自動(dòng)完成。
在 LibModel 目錄下創(chuàng)建 UserModel.class.php 文件(User 為創(chuàng)建的模型對(duì)象,也對(duì)應(yīng) 前綴_user 表),加入自動(dòng)驗(yàn)證和自動(dòng)填充規(guī)則:
class UserModel extends Model{ // 自動(dòng)驗(yàn)證設(shè)置 protected $_validate = array( array('username','require','用戶名必須填寫!',1), array('email','email','郵箱格式錯(cuò)誤!',2), array('username','','用戶名已經(jīng)存在!',0,'unique',1), ); //自動(dòng)填充設(shè)置 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 "插入數(shù)據(jù) id 為:$lastInsId"; } else { echo "數(shù)據(jù)寫入錯(cuò)誤!"; } }else{ exit($Dao->getError().' [ <a href="javascript:history.back()">返 回</a> ]'); } }
如果提交的數(shù)據(jù)不符合驗(yàn)證要求(如用戶名存在),則 create() 創(chuàng)建數(shù)據(jù)對(duì)象失?。ǚ祷?FALSE ),$Dao->getError() 會(huì)打印出自動(dòng)驗(yàn)證設(shè)置規(guī)則里面設(shè)置的提示信息:用戶名已經(jīng)存在!
如果驗(yàn)證規(guī)則通過后,系統(tǒng)會(huì)進(jìn)行自動(dòng)填充設(shè)置,將表單密碼進(jìn)行 MD5 加密以及取得當(dāng)前的時(shí)間戳填充入 create() 的數(shù)據(jù)對(duì)象。
所以 D方法 配合 create() 是非常智能而強(qiáng)大的,恰當(dāng)運(yùn)用可以達(dá)到事半功倍快速開發(fā)的目的。
提示:
① D 方法配合 create() 由于其功能強(qiáng)大,也就損失了一定的效率,在業(yè)務(wù)邏輯不復(fù)雜的情況下推薦 M方法+data() 模式
② create() 默認(rèn)接受 POST 數(shù)據(jù),若要接受其他類型數(shù)據(jù),只需在參數(shù)內(nèi)指定即可,如接受 GET 數(shù)據(jù):create($_GET)
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》及《ThinkPHP常用方法總結(jié)》
希望本文所述對(duì)大家基于ThinkPHP框架的php程序設(shè)計(jì)有所幫助。
- ThinkPHP表單令牌錯(cuò)誤的相關(guān)解決方法分析
- thinkPHP中create方法與令牌驗(yàn)證實(shí)例淺析
- ThinkPHP中的create方法與自動(dòng)令牌驗(yàn)證實(shí)例教程
- ThinkPHP令牌驗(yàn)證實(shí)例
- ThinkPHP表單自動(dòng)提交驗(yàn)證實(shí)例教程
- ThinkPHP 防止表單重復(fù)提交的方法
- thinkPHP實(shí)現(xiàn)表單自動(dòng)驗(yàn)證
- ThinkPHP表單自動(dòng)驗(yàn)證實(shí)例
- ThinkPHP中處理表單中的注意事項(xiàng)
- ThinkPHP 表單自動(dòng)驗(yàn)證運(yùn)用示例
- thinkPHP自動(dòng)驗(yàn)證、自動(dòng)添加及表單錯(cuò)誤問題分析
- ThinkPHP中create()方法自動(dòng)驗(yàn)證表單信息
- ThinkPHP下表單令牌錯(cuò)誤與解決方法分析
相關(guān)文章
詳解PHP函數(shù) strip_tags 處理字符串缺陷bug
這篇文章主要介紹了詳解PHP函數(shù) strip_tags 處理字符串缺陷bug的相關(guān)資料,需要的朋友可以參考下2017-06-06Yii基于數(shù)組和對(duì)象的Model查詢技巧實(shí)例詳解
這篇文章主要介紹了Yii基于數(shù)組和對(duì)象的Model查詢技巧,結(jié)合實(shí)例形式較為詳細(xì)的分析了Yii針對(duì)數(shù)組及對(duì)象的Model查詢使用技巧,需要的朋友可以參考下2015-12-12thinkPHP框架可添加js事件的分頁(yè)類customPage.class.php完整實(shí)例
這篇文章主要介紹了thinkPHP框架可添加js事件的分頁(yè)類customPage.class.php,以完整實(shí)例形式給出了分頁(yè)類customPage.class.php的實(shí)現(xiàn)代碼并分析了ajax動(dòng)態(tài)加載數(shù)據(jù),設(shè)置分頁(yè)鏈接等功能,需要的朋友可以參考下2017-03-03yii實(shí)現(xiàn)創(chuàng)建驗(yàn)證碼實(shí)例解析
這篇文章主要介紹了yii實(shí)現(xiàn)創(chuàng)建驗(yàn)證碼的方法,很常見的一類功能,需要的朋友可以參考下2014-07-07destoon后臺(tái)網(wǎng)站設(shè)置變成空白的解決方法
這篇文章主要介紹了destoon后臺(tái)網(wǎng)站設(shè)置變成空白的解決方法,需要的朋友可以參考下2014-06-06