溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

thinkphp 自動(dòng)驗(yàn)證學(xué)習(xí)

發(fā)布時(shí)間:2020-07-18 20:01:17 來源:網(wǎng)絡(luò) 閱讀:635 作者:Erik8928 欄目:web開發(fā)


@ php 學(xué)習(xí) thinkphp 驗(yàn)證

1,在thinkphp 中可以對(duì)create創(chuàng)建的數(shù)據(jù)對(duì)象進(jìn)行驗(yàn)證 ,一般有兩種驗(yàn)證方式: 靜態(tài)驗(yàn)證,動(dòng)態(tài)驗(yàn)證


   1.1,靜態(tài)驗(yàn)證: 在模型類里面通過$_validate屬性定義驗(yàn)證規(guī)則

     (1)驗(yàn)證格式:

        

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

          1,驗(yàn)證字段: 為數(shù)據(jù)表里的字段,同時(shí)也可以其他表單輔助字段,并且可以自定義并將自定義的字段映射到數(shù)據(jù)表的字段名

            如: 

            

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

          2,驗(yàn)證規(guī)則: 系統(tǒng)還內(nèi)置了一些常用正則驗(yàn)證的規(guī)則 有require (字段必填),email(郵箱格式),

                              url(url格式),currency(貨幣),number (正整數(shù))   ,integer(整數(shù)),double(浮點(diǎn)

                              數(shù)),zip(郵政編碼),english(英文),并且這些規(guī)則默認(rèn)附加規(guī)則是regex, 還有正

                              則表達(dá)式驗(yàn)證規(guī)則,但需要自定義設(shè)定好

          3,錯(cuò)誤提示: 自定義

          4,驗(yàn)證條件:

              包含下面幾種情況:

self::EXISTS_VALIDATE 或者0 存在字段就驗(yàn)證(默認(rèn)) 

self::MUST_VALIDATE 或者1 必須驗(yàn)證 

self::VALUE_VALIDATE或者2 值不為空的時(shí)候驗(yàn)證 

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

              

              5.1 callback 附加規(guī)則 ,其定義的驗(yàn)證規(guī)則為callback 方法的名字,附加規(guī)則為callback


              如下例:

              array(驗(yàn)證字段1,checkLength,錯(cuò)誤提示,[驗(yàn)證條件,callback,驗(yàn)證時(shí)間,callback函數(shù)的參數(shù)]),其中checkLength中的$min ,$max 的實(shí)參可以定義為 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 附加規(guī)則是相對(duì)與callback附加規(guī)則一樣,只是將定義的規(guī)則方法,放在    

                     Common 文件下Conmon文件夾建立function.php文件,后會(huì)自定調(diào)用此規(guī)則。     


           6,驗(yàn)證時(shí)間:

                           self::MODEL_INSERT或者1新增數(shù)據(jù)時(shí)候驗(yàn)證 

   self::MODEL_UPDATE或者2編輯數(shù)據(jù)時(shí)候驗(yàn)證 

   self::MODEL_BOTH或者3全部情況下驗(yàn)證(默認(rèn)) 

          7 ,多字段驗(yàn)證:

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


   (2)靜態(tài)驗(yàn)證完整格式

     

         public  UserModel extends Model 
        {
	     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('password','checkPwd','密碼格式不正確',0,'function'), // 自定義函數(shù)驗(yàn)證密碼格式   );
         }

     根據(jù)model定義好驗(yàn)證規(guī)則后,就可以在使用create方法創(chuàng)建數(shù)據(jù)對(duì)象的時(shí)候自動(dòng)調(diào)用

    

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

   1.2,動(dòng)態(tài)驗(yàn)證: 使用模型類的validate方法動(dòng)態(tài)創(chuàng)建自動(dòng)驗(yàn)證規(guī)則

       在UserController 類的方法中定義

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


   


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI