在WEB項目的開發中,項目的任何模組都會有資料添加的功能--比如使用者註冊、新聞添加、商品管理等,那麼我們就會用到表單來傳輸資料,而添加資料時無論是前台使用者還是後台管理員都避免不了填寫無效資料或者錯誤資料,那麼表單資料的驗證就是我們在做項目中必不可少的。所以如果大家參與或者獨立開發過WEB項目的話一定會發現在添加資料時大量的資料驗證--比如使用者名稱是否存在、驗證碼是否正確、密碼是否填寫一致、年齡是否是數字等問題,那麼就會用到大量的資料庫尋找、Regex的編寫等問題困擾大家。
在ThinkPHP中,內建了資料對象的自動驗證和自動完成功能來完成模型的商務規則驗證,而大多數情況下面,資料對象是由表單提交的$_POST資料建立。需要使用系統的自動驗證功能,只需要在Model類裡面定義$_validate屬性。
$_validate屬性的驗證因子格式:
array(驗證欄位,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間)
*驗證欄位:表單欄位名稱,註:這個欄位不一定是資料庫欄位,也可以是表單的一些輔助欄位--比如確認密碼和驗證碼等等。
*驗證規則: 要進行驗證的規則,有時需要結合附加規則。
內建驗證規則--包括:require 欄位必須、email 郵箱、url URL地址、currency 貨幣、number 數字,這些驗證規則可以直接使用。註:如有其它驗證規則則需自己編寫方法
*提示資訊: 用於驗證失敗後的提示資訊。
驗證條件:
0 或者 Model::EXISTS_TO_VAILIDATE--存在欄位就驗證 (預設)
1 或者 Model::MUST_TO_VALIDATE--必須驗證
2 或者 Model::VALUE_TO_VAILIDATE--值不為空白的時候驗證
附加規則: 配合驗證規則使用
regex 使用正則進行驗證,表示前面定義的驗證規則是一個Regex(預設)
function 使用函數驗證,前面定義的驗證規則是一個函數名 註:系統函數或自訂函數
callback 使用方法驗證,前面定義的驗證規則是當前Model類的一個方法 註:自訂方法
confirm 驗證表單中的兩個欄位是否相同,前面定義的驗證規則是一個欄位名
equal 驗證是否等於某個值,該值由前面的驗證規則定義
in 驗證是否在某個範圍內 註:前面定義的驗證規則必須是一個數組
unique 驗證是否唯一,系統會根據欄位目前的值查詢資料庫來判斷是否存在相同的值 註:會請求資料庫
驗證時間:
1 或者 Model:: MODEL_INSERT--新增資料時候驗證
2 或者 Model:: MODEL_UPDATE--編輯資料時候驗證
3 或者 Model:: MODEL_BOTH--全部情況下驗證(預設)
熟悉了$_validate屬性後,就要用執行個體來分析在驗證某些資料的時候該怎麼樣編寫驗證因子。
如果學習過ThinkPHP的同學們應該在手冊中看到過一些關於自動驗證的例子,在這裡我們將把大多數常用的例子都總結在這裡,方便大家來學習和使用,如果有一些同學們常用但是這裡沒有提到的大家可以集思廣益,來完善所有的自動驗證資料的方法,這裡將不斷更新。
執行個體:
protected $_validate = array(
array('username','require','使用者名稱必須!'), // 資料是否為空白 註:預設增加修改都驗證
array('username','','使用者名稱已經存在!',0,’unique’,1), // 在新增的時候驗證username欄位是否唯一
array('password','checkPwd','密碼格式不正確',0,’function’), // 密碼格式可以用chenkPwd方法自訂
array('repassword','password','確認密碼不正確',0,’confirm’), // 驗證確認密碼是否和密碼一致
array('sex','array(0,1,2)','性別必須為0,1,2',0,'in'), // 驗證資料是否在一個範圍內
array('age','number','年齡必須為數字'), // 驗證資料是否為數字
array('email','email','郵箱格式不正確'), // 內建正則驗證郵箱
array('email','/^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$/','郵箱格式不正確), // 自訂正則驗證資料
array('mypage','url','個人網址格式不正確'), // 內建正則驗證URL地址
array('verify','****','驗證碼不正確',0,'equal'), // 驗證資料是否等於某個值 註:****可以是隨機驗證碼
array('salary','currency','薪水驗證不正確','0'), // 內建驗證貨幣資料
);
ThinkPHP的自動驗證功能幾乎可以滿足任何資料驗證的需求,所以大家在用ThinkPHP做項目中的資料添加並驗證的時候,利用自動驗證和自動完成功能就不用擔心資料的驗證這個麻煩的問題了。自動完成功能下次講解和總結,並且還會陸續發布ThinkPHP的項目模組製作和項目執行個體,希望大家支援。