日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

ThinkPHP--自动验证

發(fā)布時(shí)間:2023/12/29 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ThinkPHP--自动验证 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、驗(yàn)證規(guī)則

1、驗(yàn)證規(guī)則

數(shù)據(jù)驗(yàn)證可以對表單中的字段進(jìn)行非法驗(yàn)證操作。一般提供了兩種驗(yàn)證方式:靜態(tài)定義($_validate屬性)和動(dòng)態(tài)驗(yàn)證(validate()方法)。

//驗(yàn)證規(guī)則 array{array(驗(yàn)證字段1,驗(yàn)證規(guī)則,錯(cuò)誤提示,[驗(yàn)證條件,附加規(guī)則,驗(yàn)證時(shí)間]),array(驗(yàn)證字段1,驗(yàn)證規(guī)則,錯(cuò)誤提示,[驗(yàn)證條件,附加規(guī)則,驗(yàn)證時(shí)間]),...... }

PS:驗(yàn)證字段、驗(yàn)證規(guī)則和錯(cuò)誤提示這三項(xiàng)是必選的,大多數(shù)也是用這三項(xiàng);而驗(yàn)證條件、附加規(guī)則和驗(yàn)證時(shí)間是可選的。

驗(yàn)證字段:一般來說是表單的字段名,不一定必須和數(shù)據(jù)表匹配,因?yàn)橛幸恍┍热缑艽a確認(rèn)等輔助字段的存在。

驗(yàn)證規(guī)則:系統(tǒng)內(nèi)置了常用的規(guī)則,require(字段必填)、email(郵箱格式)、url(url格式)、currency(貨幣)、number(正整數(shù))、integer(整數(shù))、double(浮點(diǎn)數(shù))、zip(郵政編碼)、english(英文)。這些規(guī)則都默認(rèn)采用的附加規(guī)則是regex,正則表達(dá)式驗(yàn)證,只不過是設(shè)定好的。

錯(cuò)誤提示:驗(yàn)證失敗后的提示。

驗(yàn)證條件:共三種:

1)self::EXISTS_VALIDATE或0,表示存在字段就驗(yàn)證(默認(rèn))(就是數(shù)據(jù)提交過來了才進(jìn)行驗(yàn)證); 2)self::MUST_VALIDATE或1,表示必須驗(yàn)證(不論有沒有字段都需要驗(yàn)證); 3)self::VALUE_VALIDATE或2,表示值不為空的時(shí)候驗(yàn)證(就比如郵箱,可填可不填的情況下,填了就驗(yàn)證合法性,沒填就直接略過)。

附加規(guī)則:配合驗(yàn)證規(guī)則使用,包括以下規(guī)則:

規(guī)則說明
regex正則驗(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)前模型類的一個(gè)方法
confirm驗(yàn)證表單中的兩個(gè)字段是否相同,定義的驗(yàn)證規(guī)則是一個(gè)字段名
equal驗(yàn)證是否等于某個(gè)值,該值由前面的驗(yàn)證規(guī)則定義
notequal驗(yàn)證是否不等于某個(gè)值,該值由前面的驗(yàn)證規(guī)則定義(3.1.2版本新增)
in驗(yàn)證是否在某個(gè)范圍內(nèi),定義的驗(yàn)證規(guī)則可以是一個(gè)數(shù)組或者逗號(hào)分割的字符串
notin驗(yàn)證是否不在某個(gè)范圍內(nèi),定義的驗(yàn)證規(guī)則可以是一個(gè)數(shù)組或者逗號(hào)分割的字符串
length驗(yàn)證長度,定義的驗(yàn)證規(guī)則可以是一個(gè)數(shù)字(表示固定長度)或者數(shù)字范圍(例如3,12表示長度從3到12的范圍)
between驗(yàn)證范圍,定義的驗(yàn)證規(guī)則表示范圍,可以使用字符串或者數(shù)組,例如1,31或者array(1,31)
notbetween驗(yàn)證不在某個(gè)范圍,定義的驗(yàn)證規(guī)則表示范圍,可以使用字符串或者數(shù)組
expire驗(yàn)證是否在有效期,定義的驗(yàn)證規(guī)則表示時(shí)間范圍,可以到時(shí)間,例如可用2018-1-15,2019-1-15表示當(dāng)前提交有效期在2018-1-15到2019-1-15之間,也可以使用時(shí)間戳定義
ip_allow驗(yàn)證IP是否允許,定義的驗(yàn)證規(guī)則表示允許的IP地址列表,用逗號(hào)分隔,例如201.12.2.5,201.12.2.6
ip_deny驗(yàn)證IP是否禁止,定義的驗(yàn)證規(guī)則表示禁止的IP地址列表,可用逗號(hào)分隔,如192.168.1.1,192.168.1.100
unique驗(yàn)證是否唯一,系統(tǒng)會(huì)根據(jù)字段目前的值查詢數(shù)據(jù)庫來判斷是否存在相同的值;當(dāng)表單數(shù)據(jù)中包含主鍵字段時(shí)unique不可用于判斷主鍵字段本身

驗(yàn)證時(shí)間:主要新增修改等驗(yàn)證。

1)self::MODEL_INSERT或1表示新增數(shù)據(jù)時(shí)驗(yàn)證; 2)self::MODEL_UPDATE或2表示標(biāo)記數(shù)據(jù)時(shí)驗(yàn)證; 3)self::MODEL_BOTH或3表示全部情況下驗(yàn)證(默認(rèn))。

2、靜態(tài)定義

在模型類里預(yù)先定義好該模型的自動(dòng)驗(yàn)證規(guī)則,就是靜態(tài)定義。

//模型類定義驗(yàn)證規(guī)則 <?php namespace Home\Model; Use Think\Model;class UserModel extends Model{protected $_validate = array(//分別對應(yīng)上面的部分,user為字段,require為驗(yàn)證規(guī)則,然后是錯(cuò)誤提示,驗(yàn)證條件,附加規(guī)則,驗(yàn)證時(shí)間array('user','require','用戶名不得為空',0,'regex',3),array(),); } ?>

為了測試方便,我們直接通過模擬提交POST。

//控制器create()方法自動(dòng)調(diào)用驗(yàn)證 $user = D('User'); $data['user'] = '某某人'; $data['pass'] = '123'; if($user->create($data)){echo '所有數(shù)據(jù)驗(yàn)證成功'; }else{//輸出錯(cuò)誤信息var_dump($user->getError()); }

TP框架提供了9種自動(dòng)驗(yàn)證內(nèi)置方案,具體如下:

//內(nèi)置驗(yàn)證require,非空檢測 array('user','require','用戶名不得為空'); //內(nèi)置驗(yàn)證email,郵箱格式合法性檢測 array('user','email','郵箱格式不合法'); //內(nèi)置驗(yàn)證URL,網(wǎng)址合法性檢測 array('user','url','URL路徑不合法'); //內(nèi)置驗(yàn)證currency,貨幣格式檢測 array('user','currency','貨幣格式不正確'); //內(nèi)置zip,郵編格式檢測 array('user','zip','郵政編碼格式不正確'); //內(nèi)置驗(yàn)證number,正整數(shù)檢測 array('user','number','非正整數(shù)'); //內(nèi)置驗(yàn)證integer,整數(shù)驗(yàn)證,正負(fù)均可 array('user','integer','整數(shù)格式不正確'); //內(nèi)置驗(yàn)證double,驗(yàn)證是否為浮點(diǎn)數(shù) array('user','double','必須是浮點(diǎn)數(shù)'); //內(nèi)置驗(yàn)證english,純英文檢測 array('user','english','不是純英文');

TP框架還提供了附加規(guī)則,來提示自動(dòng)驗(yàn)證的擴(kuò)展性:

//附加規(guī)則regex,驗(yàn)證3-6位純數(shù)字 array('user','/^d{3,6}$/','不是3-6位純數(shù)字','0','regex'); //附加規(guī)則equal,驗(yàn)證是否和指定值相等 array('user','某某某','值不對等','0','equal'); //附加規(guī)則notequal,驗(yàn)證是否與指定值不等 array('user','某某某','值不能對等','0','notequal'); //附加規(guī)則confirm,驗(yàn)證兩條字段是否相同 //也可用于密碼和重復(fù)密碼驗(yàn)證 array('user','name','兩個(gè)用戶名對比不同','0','confirm'); //附加規(guī)則in,某個(gè)范圍,可以是數(shù)組或逗號(hào)分隔的字符串 //與之對應(yīng)的是notin array('user',array(1,2,3),'不在指定范圍','0','in'); array('user','張三,李四,王五','不在指定范圍','0','in'); //附加規(guī)則length,驗(yàn)證長度或數(shù)字范圍 array('user','3','不得小于3位','0','length'); array('user','3,5','不得小于3位,不得大于5位','0','length'); //附加規(guī)則between,驗(yàn)證某個(gè)范圍,數(shù)字或逗號(hào)字符串 //與之對應(yīng)的是notbetween array('user',array(3,5,),'必須是3-5之間的數(shù)字','0','between'); array('user','3,5','必須是3-5之間的數(shù)字','0','between'); //附加規(guī)則expire,設(shè)置有效時(shí)間范圍,必須是通過表單提交才有效,可以是時(shí)間戳 array('user','2017-1-1,2018-1-1','時(shí)間已過期','0','expire'); //附加規(guī)則ip_deny,IP禁止訪問列表 //與之對應(yīng)的是ip_allow ----IP允許 array('user','127.0.0.1','當(dāng)前IP禁止','0','ip_deny');

上面是已經(jīng)定義好的,如果系統(tǒng)未定義的就是通過其他方法如:

//附加規(guī)則callback,回調(diào)驗(yàn)證 array('user','checklength','用戶名必須在3-5位','0','callback',3,array(3,5));//回調(diào)方法 protected function checklength($str,$min,$max){preg_match_all("/./u",$str,$matches);$len = count($matches[0]);if($len<$min||$len>$max){return false;}else{return ture;} } //另一種是附加規(guī)則function,函數(shù)驗(yàn)證 array('user','checklength','用戶名必須在3-5位','0','function',3,array(3,5));//在Common文件夾下的Common文件夾建立function.php文件,會(huì)自動(dòng)加載 function checklength($str,$min,$max){preg_match_all("/./u",$str,$matches);$len = count($matches[0]);if($len<$min||$len>$max){return false;}else{return ture;} }

如果有多個(gè)字段都包含錯(cuò)誤,默認(rèn)只顯示一個(gè)錯(cuò)誤。
當(dāng)想顯示全部錯(cuò)誤的時(shí)候,可以說盒子屬性

//批量驗(yàn)證 protected $patchValidate = true;

如果是直接POST過來的,直接用create()方法即可。

//控制器create()方法自動(dòng)調(diào)用驗(yàn)證 $user = D('User');

總結(jié)

以上是生活随笔為你收集整理的ThinkPHP--自动验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。