ThinkPHP 自動(dòng)驗(yàn)證
ThinkPHP 內(nèi)置了數(shù)據(jù)對(duì)象的自動(dòng)驗(yàn)證功能來(lái)完成模型的業(yè)務(wù)規(guī)則驗(yàn)證,自動(dòng)驗(yàn)證是基于數(shù)據(jù)對(duì)象的,而大多情況下數(shù)據(jù)對(duì)象是基于 $_POST表單(不是絕對(duì)的)創(chuàng)建的.
基本的自動(dòng)驗(yàn)證功能包括:必須字段、email郵箱格式、唯一性、URL地址、數(shù)字、兩個(gè)字段是否相同、是否等于某個(gè)值等。
要使用系統(tǒng)的自動(dòng)驗(yàn)證功能,只需要在對(duì)應(yīng)的 Model類 里面定義 $_validate 屬性(由多個(gè)驗(yàn)證因子組成的數(shù)組),語(yǔ)法如下:
- protected $_validate = array(
- array(驗(yàn)證字段,驗(yàn)證規(guī)則,錯(cuò)誤提示[,驗(yàn)證條件][,附加規(guī)則][,驗(yàn)證時(shí)間])
- };
ThinkPHP自動(dòng)驗(yàn)證格式說(shuō)明:
驗(yàn)證因子 | 說(shuō)明 |
---|---|
驗(yàn)證字段 | 必須。需要驗(yàn)證的表單字段名稱,這個(gè)字段不一定是數(shù)據(jù)庫(kù)字段,也可以是表單的一些輔助字段,例如驗(yàn)證碼等。 |
驗(yàn)證規(guī)則 | 必須。要進(jìn)行驗(yàn)證的規(guī)則,需要聯(lián)合附加規(guī)則一起使用。 |
錯(cuò)誤提示 | 必須。當(dāng)驗(yàn)證不通過(guò)時(shí)的提示信息。 |
驗(yàn)證條件 | 可選。包括:
|
附加規(guī)則 | 可選。配合驗(yàn)證規(guī)則使用,包括:
|
驗(yàn)證時(shí)間 | 可選。包括:
|
自動(dòng)驗(yàn)證例子,下面的例子驗(yàn)證文章標(biāo)題必須填寫且檢測(cè)標(biāo)題是否已存在:
- class ArticleModel extends Model{
- protected $_validate = array(
- array('title','require','標(biāo)題不能為空!'),
- array('title','','標(biāo)題已經(jīng)存在!',0,'unique',1),
- };
- }
在操作中,當(dāng)使用 create 方法創(chuàng)建數(shù)據(jù)對(duì)象時(shí)會(huì)自動(dòng)進(jìn)行數(shù)據(jù)驗(yàn)證操作(當(dāng) POST 提交表單處理時(shí)):
- $Article = D("Article");
- if (!$Article->create()){
- // 如果創(chuàng)建失敗,表示驗(yàn)證沒(méi)有通過(guò)(注:可能原因之一)輸出錯(cuò)誤提示信息
- exit($Article->getError());
- }else{
- // 驗(yàn)證通過(guò),繼續(xù)下一步流程如將數(shù)據(jù)寫入數(shù)據(jù)表
- }
系統(tǒng)內(nèi)置了一些常用正則驗(yàn)證的規(guī)則,包括:require(必須)、email(郵箱格式)、url(URL地址)、currency(貨幣)、number(數(shù)字)、qq(QQ號(hào)碼)、english(英文字符),可以直接使用。
出于用戶體驗(yàn)考慮,$Article->getError() 返回的錯(cuò)誤提示信息,一般以 Ajax 方式返回,詳細(xì)參見(jiàn)《ThinkPHP Ajax》.
定義自己的驗(yàn)證規(guī)則
當(dāng)內(nèi)置的這些驗(yàn)證規(guī)則無(wú)法滿足驗(yàn)證要求是,可以定義自己的驗(yàn)證規(guī)則,如要求出生年月以 2000-1-1 格式輸入時(shí):
array('birthday','/^d{4}-d{1,2}-d{1,2}$/','出生年月格式錯(cuò)誤!')
可見(jiàn),只需幾行簡(jiǎn)單的代碼,就實(shí)現(xiàn)了各種不同方式的表單驗(yàn)證,靈活使用 ThinkPHP 自動(dòng)驗(yàn)證,可以讓開(kāi)發(fā)過(guò)程事半功倍.
新聞熱點(diǎn)
疑難解答
圖片精選