附加規則expire,設置有效期范圍,必須是表單提交有效,可以是時間戳
這時,在 Home/controller/UserController.class.php 中插入
1 public function add() { 2 $user=D('User'); 3 4 $data['user']=''; 5 if($user->create($data)) { 6 echo '所有字段驗證成功'; 7 }else { 8 var_dump($user->getError()); 9 } 10 }
因為$data['user']在驗證的時候不是驗證這里有沒有值,而是驗證表單提交的時間,而且,如果不是表單提交,直接執行add()函數是沒有用的還是會出錯。
在 Home/Model/UserModel.class.php 插入以下代碼:
1 <?php 2 namespace Home\Model; 3 use Think\Model; 4 5 class UserModel extends Model { 6 protected $_validate= array( 7 array('user', '2014-1-10,2015-10-10', '時間已過期', 0, 'expire'), 8 ); 9 10 }
這時驗證的時間是 '2014-1-10,2015-10-10' 以內,
然后在index.html(與主目錄下的index.php是同級的)插入以下代碼:
1 <meta charset="utf-8"> 2 <form method="post" action="http://localhost/demo39/index.php/Home/User/add"> 3 <p>用戶:<input type="text" name="yonghu" /></p> 4 <p>郵箱:<input type="text" name="youxiang" /></p> 5 <input type="submit" value="提交"> 6 </form>
注意,這里不要加上輸入的時間,
附加規則callback,回調驗證
在 Home/controller/UserController.class.php 插入以下代碼:
1 public function add() { 2 $user=D('User'); 3 $data['user']='zdp'; 4 if($user->create($data)) { 5 echo '所有字段驗證成功'; 6 }else { 7 var_dump($user->getError()); 8 } 9 }
然后在 Home/Model/UserModel.class.php 插入驗證的代碼:
1 <?php 2 namespace Home\Model; 3 use Think\Model; 4 5 class UserModel extends Model { 6 protected $_validate= array( 7 array('user', 'checkLength', '用戶名必須在 3-5 位', 0, 'callback', 3,array(3,5)),//v這里的array(3,5)是checkLength內的$min和$maxl兩個參數 8 ); 9 protected function checkLength($str,$min,$max) { 10 preg_match_all("/./", $str, $matches); //如果驗證的是中文,則正則為"/./u",后面的u是utf8編碼格式 11 $len =count($matches[0]); 12 if($len<$min||$len>$max) { 13 return false; 14 } else { 15 return true; 16 } 17 } 18 19 }
附加規則function,函數驗證
在 Home/Model/UserModel.class.php 內代碼為:
1 <?php 2 namespace Home\Model; 3 use Think\Model; 4 5 class UserModel extends Model { 6 protected $_validate= array( 7 array('user', 'checkLength', '用戶名必須在 3-5 位', 0, 'function', 3,array(3,5)),//v這里的array(3,5)是checkLength內的$min和$maxl兩個參數 8 ); 9 }
然后在 Common 文件夾下的 Common 文件夾建立 function.php 文件,會自動加載
寫入以下代碼:
1 <?php 2 function checkLength($str,$min,$max) { 3 preg_match_all("/./", $str, $matches); //如果驗證的是中文,則正則為"/./u",后面的u是utf8編碼格式 4 $len =count($matches[0]); 5 if($len<$min||$len>$max) { 6 return false; 7 } else { 8 return true; 9 } 10 }
如果有多個字段都包含錯誤,默認只顯示一個錯誤。如果想顯示全部錯誤,可以設置屬性:
1 protected $patchValidate = true;
這時在 Home/controller/UserController.class.php 內插入:
1 public function add() { 2 $user=D('User'); 3 $data['user']=''; 4 $data['email'] ='bbbb'; 5 if($user->create($data)) { 6 echo '所有字段驗證成功'; 7 }else { 8 var_dump($user->getError()); 9 } 10 }
然后在 Home/Model/UserModel.class.php 內插入:
1 <?php 2 namespace Home\Model; 3 use Think\Model; 4 5 class UserModel extends Model { 6 protected $_validate= array( 7 array('user', 'require', '用戶名不得為空', 0, 'regex', 3), 8 array('email', 'email', '郵箱格式不正確'), 9 ); 10 protected $patchValidate = true; 11 }
這時才會將兩個錯誤都顯示出來
如果想把錯誤信息返回給ajax處理,可以是同ajaxReturn()方法返回JSON數據。
1 //返回JSON格式 2 $this->ajaxReturn($user->getError());
這時在原先在 Home/controller/UserController.class.php 使用的錯誤顯示時用的 var_dump($user->getError()); 改為 $this->ajaxReturn($user->getError());
錯誤信息顯示如下:
還有一個就是
1 //1指定新增數據驗證,2表示修改, 2 if ($user->create($_POST,1)) {} //一般會自動判斷,就是表單提交時根據信息來判斷提交來的數據是新增還是修改
三. 動態驗證
動態驗證就是把驗證的規則放在控制器端,這樣,在操作的時候比較靈活,缺點就是比較混亂。
1 public function add() { 2 $rule = array( 3 array('user','require','用戶名不得為空'), 4 ); 5 $user=M('User'); 6 $data['user']=''; 7 $data['email'] ='123'; 8 if($user->validate($rule)->create($data)) { 9 echo '所有字段驗證成功'; 10 }else { 11 var_dump($user->getError()); 12 } 13 }
這時判定提交的數據必須加上 validate($rule) ,要不然就直接驗證為'所有字段驗證成功'
文章列表