thinkphp 自動驗證學習


@ php 學習 thinkphp 驗證

1,在thinkphp 中可以對create創建的數據對象進行驗證 ,一般有兩種驗證方式: 靜態驗證,動態驗證


   1.1,靜態驗證: 在模型類裏面通過$_validate屬性定義驗證規則

     (1)驗證格式:

        

     array(     
                array(驗證字段1,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間]),
          )

          1,驗證字段: 爲數據表裏的字段,同時也可以其他表單輔助字段,並且可以自定義並將自定義的字段映射到數據表的字段名

            如: 

            

       Class UserModel extends Model
            {
               protected $_map = array(
                      'name' =>'username', // 把表單中name映射到數據表的username字段
                      'mail'  =>'email', // 把表單中的mail映射到數據表的email字段
               );
            }

          2,驗證規則: 系統還內置了一些常用正則驗證的規則 有require (字段必填),email(郵箱格式),

                              url(url格式),currency(貨幣),number (正整數)   ,integer(整數),double(浮點

                              數),zip(郵政編碼),english(英文),並且這些規則默認附加規則是regex, 還有正

                              則表達式驗證規則,但需要自定義設定好

          3,錯誤提示: 自定義

          4,驗證條件:

              包含下面幾種情況:

self::EXISTS_VALIDATE 或者0 存在字段就驗證(默認) 

self::MUST_VALIDATE 或者1 必須驗證 

self::VALUE_VALIDATE或者2 值不爲空的時候驗證 

          5,附加條件: 參考手冊 ,其中function  和callback 兩種附加條件

              

              5.1 callback 附加規則 ,其定義的驗證規則爲callback 方法的名字,附加規則爲callback


              如下例:

              array(驗證字段1,checkLength,錯誤提示,[驗證條件,callback,驗證時間,callback函數的參數]),其中checkLength中的$min ,$max 的實參可以定義爲 array(3,5)。爲$min 傳的值爲3,$max傳的值爲5

                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 true;
	                 }
                  }

               5.1 function 附加規則是相對與callback附加規則一樣,只是將定義的規則方法,放在    

                     Common 文件下Conmon文件夾建立function.php文件,後會自定調用此規則。     


           6,驗證時間:

                           self::MODEL_INSERT或者1新增數據時候驗證 

   self::MODEL_UPDATE或者2編輯數據時候驗證 

   self::MODEL_BOTH或者3全部情況下驗證(默認) 

          7 ,多字段驗證:

   在UserModel類中增加 :protected $patchValidate = true;


   (2)靜態驗證完整格式

     

         public  UserModel extends Model 
        {
	     protected $_validate = array(   
	       array('verify','require','驗證碼必須!'), //默認情況下用正則進行驗證    
               array('name','','帳號名稱已經存在!',0,'unique',1), // 在新增的時候驗證name字段是否唯一 
               array('password','checkPwd','密碼格式不正確',0,'function'), // 自定義函數驗證密碼格式   );
         }

     根據model定義好驗證規則後,就可以在使用create方法創建數據對象的時候自動調用

    

            public UserController extends Controller
           {
     	       public function add ()
     	      {    //判斷是由post 上傳的數據
	           if(IS_POST){
	              if (!$User->create()){   
	                // 如果創建失敗 表示驗證沒有通過 輸出錯誤提示信息    
	                 exit($User->getError());
	                }else{   
	                  // 驗證通過 可以進行其他數據操作
	                }
	           }
     	       }
	
          }

   1.2,動態驗證: 使用模型類的validate方法動態創建自動驗證規則

       在UserController 類的方法中定義

         $rules = array(    
                        array('verify','require','驗證碼必須!'), //默認情況下用正則進行驗證
                 );
         $User = M("User"); // 實例化User對象
         if (!$User->validate($rules)->create())
         {     
         // 如果創建失敗 表示驗證沒有通過 輸出錯誤提示信息   
           exit($User->getError());
           }else{ 
               // 驗證通過 可以進行其他數據操作
                }


   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章