在WEB專案的開發中,專案的任何模組都會有資料新增的功能--例如用戶註冊、新聞新增、商品管理等,那麼我們就會用到表單來傳輸數據,而新增資料時無論是前台用戶還是後台管理員都避免不了填寫無效數據或錯誤數據,那麼表單數據的驗證就是我們在做專案中必不可少的。所以如果大家參與或獨立開發過WEB項目的話一定會發現在添加數據時大量的數據驗證--比如用戶名是否存在、驗證碼是否正確、密碼是否填寫一致、年齡是否是數字等問題,那麼就會用到大量的資料庫查找、正規表示式的編寫等問題困擾大家。
在ThinkPHP中,內建了資料物件的自動驗證和自動完成功能來完成模型的業務規則驗證,而大多數情況下面,資料物件是由表單提交的$_POST資料建立。需要使用系統的自動驗證功能,只需要在Model類別裡面定義$_validate屬性。
$_validate屬性的驗證因子格式:
array(驗證欄位,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間)
*驗證欄位:表單欄位名稱,附註:這個欄位不一定是資料庫字段,也可以是表單的一些輔助字段--例如確認密碼和驗證碼等等。
*驗證規則: 要進行驗證的規則,有時需要結合附加規則。
內建驗證規則--包括:require 欄位必須、email 信箱、url URL位址、currency 貨幣、number 數字,這些驗證規則可以直接使用。註:如有其它驗證規則則需自行編寫方法
*提示訊息: 用於驗證失敗後的提示訊息。
驗證條件:
0 或Model::EXISTS_TO_VAILIDATE--存在欄位就驗證(預設)
1 或Model::MUST_TO_VALIDATE--必須驗證
或值驗證附加規則: 配合驗證規則使用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,'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','個人網址格式不正確'), // 內建正規驗證網址驗證網址array('verify','****','驗證碼不正確',0,'equal'), // 驗證資料是否等於某個值註:****可以是隨機驗證碼 array('salary','currency','薪水驗證不正確','0'), // 內建驗證貨幣資料);
ThinkPHP的自動驗證功能幾乎可以滿足任何資料驗證的需求,所以大家在用ThinkPHP做專案中的資料添加並驗證的時候,利用自動驗證和自動完成功能就不用擔心資料的驗證這個麻煩的問題了。自動完成功能下次講解和總結,也會陸續發布ThinkPHP的專案模組製作和專案實例,希望大家支持。