zoukankan      html  css  js  c++  java
  • 自动验证[2]

    附加规则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 HomeModel;
     3 use ThinkModel;
     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 HomeModel;
     3 use ThinkModel;
     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 HomeModel;
    3 use ThinkModel;
    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 HomeModel;
     3 use ThinkModel;
     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) ,要不然就直接验证为'所有字段验证成功'

  • 相关阅读:
    CentOS8下升级Python3.6到3.9
    web service基础知识
    mysql+centos7+主从复制
    saltstack高效运维
    Docker
    python如何配置virtualenv
    Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
    nginx+uWSGI+django+virtualenv+supervisor发布web服务器
    RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1
    flask-wtforms
  • 原文地址:https://www.cnblogs.com/jacson/p/4500995.html
Copyright © 2011-2022 走看看