WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計(jì)算
- 微博營(yíng)銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺(tái)
- WIKI程序與應(yīng)用
- 美國(guó)十大主機(jī)
ThinkPHP開發(fā)指南-模型之自動(dòng)驗(yàn)證
導(dǎo)航:上一頁
類型檢查只是針對(duì)數(shù)據(jù)庫級(jí)別的驗(yàn)證,所以系統(tǒng)還內(nèi)置了數(shù)據(jù)對(duì)象的自動(dòng)驗(yàn)證功能來完成模型的業(yè)務(wù)規(guī)則驗(yàn)證,而大多數(shù)情況下面,數(shù)據(jù)對(duì)象是由表單提交的$_POST數(shù)據(jù)創(chuàng)建。需要使用系統(tǒng)的自動(dòng)驗(yàn)證功能,只需要在Model類里面定義$_validate屬性,是由多個(gè)驗(yàn)證因子組成的數(shù)組,支持的驗(yàn)證因子格式:
PHP代碼
array(驗(yàn)證字段,驗(yàn)證規(guī)則,錯(cuò)誤提示,驗(yàn)證條件,附加規(guī)則,驗(yàn)證時(shí)間)
- 驗(yàn)證字段:需要驗(yàn)證的表單字段名稱,這個(gè)字段不一定是數(shù)據(jù)庫字段,也可以是表單的一些輔助字段,例如確認(rèn)密碼和驗(yàn)證碼等等。(必須)
- 驗(yàn)證規(guī)則: 要進(jìn)行驗(yàn)證的規(guī)則,需要結(jié)合附加規(guī)則(必須)
- 提示信息: 用于驗(yàn)證失敗后的提示信息定義(必須)
- 驗(yàn)證條件:(可選)
PHP代碼
Model::EXISTS_TO_VAILIDATE 或者0 存在字段就驗(yàn)證 (默認(rèn)) Model::MUST_TO_VALIDATE 或者1 必須驗(yàn)證 Model::VALUE_TO_VAILIDATE或者2 值不為空的時(shí)候驗(yàn)證
附加規(guī)則: 配合驗(yàn)證規(guī)則使用(可選),包括:
- regex 使用正則進(jìn)行驗(yàn)證,表示前面定義的驗(yàn)證規(guī)則是一個(gè)正則表達(dá)式(默認(rèn))
- function 使用函數(shù)驗(yàn)證,前面定義的驗(yàn)證規(guī)則是一個(gè)函數(shù)名
- callback 使用方法驗(yàn)證,前面定義的驗(yàn)證規(guī)則是當(dāng)前Model類的一個(gè)方法
- confirm 驗(yàn)證表單中的兩個(gè)字段是否相同,前面定義的驗(yàn)證規(guī)則是一個(gè)字段名
- equal 驗(yàn)證是否等于某個(gè)值,該值由前面的驗(yàn)證規(guī)則定義
- in 驗(yàn)證是否在某個(gè)范圍內(nèi),前面定義的驗(yàn)證規(guī)則必須是一個(gè)數(shù)組
- unique 驗(yàn)證是否唯一,系統(tǒng)會(huì)根據(jù)字段目前的值查詢數(shù)據(jù)庫來判斷是否存在相同的值
系統(tǒng)還內(nèi)置了一些常用正則驗(yàn)證的規(guī)則,可以直接使用,包括:require 字段必須、email 郵箱、url URL地址、currency 貨幣、number 數(shù)字,這些驗(yàn)證規(guī)則可以直接使用。驗(yàn)證時(shí)間:(可選)
PHP代碼
Model:: MODEL_INSERT 或者1新增數(shù)據(jù)時(shí)候驗(yàn)證 Model:: MODEL_UPDATE 或者2編輯數(shù)據(jù)時(shí)候驗(yàn)證 Model:: MODEL_BOTH 或者3 全部情況下驗(yàn)證(默認(rèn))
示例:PHP代碼
protected $_validate = array( array('verify','require','驗(yàn)證碼必須!'), //默認(rèn)情況下用正則進(jìn)行驗(yàn)證 array(name,'','帳號(hào)名稱已經(jīng)存在!',0,’unique’,1), // 在新增的時(shí)候驗(yàn)證name字段是否唯一 array('value',array(1,2,3),'值的范圍不正確!',2,’in’), // 當(dāng)值不為空的時(shí)候判斷是否在一個(gè)范圍內(nèi) array('repassword','password','確認(rèn)密碼不正確',0,’confirm’), // 驗(yàn)證確認(rèn)密碼是否和密碼一致 array('password','checkPwd','密碼格式不正確',0,’function’), // 自定義函數(shù)驗(yàn)證密碼格式 );
當(dāng)使用系統(tǒng)的create方法創(chuàng)建數(shù)據(jù)對(duì)象的時(shí)候會(huì)自動(dòng)進(jìn)行數(shù)據(jù)驗(yàn)證操作,代碼示例:
PHP代碼
$User = D("User"); // 實(shí)例化User對(duì)象 if (!$User->create()){ // 如果創(chuàng)建失敗 表示驗(yàn)證沒有通過 輸出錯(cuò)誤提示信息 exit($User->getError()); }else{ // 驗(yàn)證通過 可以進(jìn)行其他數(shù)據(jù)操作 }
通常來說,每個(gè)數(shù)據(jù)表對(duì)應(yīng)的驗(yàn)證規(guī)則是相對(duì)固定的,但是有些特殊的情況下面可能會(huì)改變驗(yàn)證規(guī)則,我們可以動(dòng)態(tài)的改變驗(yàn)證規(guī)則來滿足不同條件下面的驗(yàn)證:
PHP代碼
$User = D("User"); // 實(shí)例化User對(duì)象 $validate = array( array('verify','require','驗(yàn)證碼必須!'), // 僅僅需要進(jìn)行驗(yàn)證碼的驗(yàn)證 ); $User-> setProperty("_validate",$validate); $result = $User->create(); if (!$result){ // 如果創(chuàng)建失敗 表示驗(yàn)證沒有通過 輸出錯(cuò)誤提示信息 exit($User->getError()); }else{ // 驗(yàn)證通過 可以進(jìn)行其他數(shù)據(jù)操作 }