文章出處

附加規則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) ,要不然就直接驗證為'所有字段驗證成功'

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()