• 验证器的使用


    namespace appindexvalidate;
    
    use thinkValidate;
    
    class User extends Validate
    {
        protected $rule = [
            'name'  =>  'require|max:25',
            'email' =>  'email',
        ];
    
    }
    

    在需要进行User验证的地方,添加如下代码即可:

    $data = [
        'name'=>'thinkphp',
        'email'=>'thinkphp@qq.com'
    ];
    
    $validate = Loader::validate('User');
    
    if(!$validate->check($data)){
        dump($validate->getError());
    }
    

    使用助手函数实例化验证器

    $validate = validate('User');

    可以在实例化Validate类的时候传入验证规则,例如:

    $rules = [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
    ];
    $validate = new Validate($rules);
    

    也可以使用rule方法动态添加规则,例如:

    $rules = [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
    ];
    $validate = new Validate($rules);
    $validate->rule('zip', '/^d{6}$/');
    $validate->rule([
        'email'   => 'email',
    ]);
    

    规则定义

    规则定义支持下面两种方式:

    $rules = [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
    ];
    $validate = new Validate($rules);
    

    对于一个字段可以设置多个验证规则,使用|分割。

    或者采用数组方式定义多个规则(适用于你的验证规则中有|的情况)

    $rules = [
        'name'  => ['require','max'=>25],
        'age'   => ['number','between'=>'1,120'],
    ];
    $validate = new Validate($rules);
    

    属性定义

    通常情况下,我们实际在定义验证类的时候,可以通过属性的方式直接定义验证规则等信息,例如:

    namespace appindexvalidate;
    
    use thinkValidate;
    
    class User extends Validate
    {
        protected $rule =   [
            'name'  => 'require|max:25',
            'age'   => 'number|between:1,120',
            'email' => 'email',    
        ];
        
        protected $message  =   [
            'name.require' => '名称必须',
            'name.max'     => '名称最多不能超过25个字符',
            'age.number'   => '年龄必须是数字',
            'age.between'  => '年龄只能在1-120之间',
            'email'        => '邮箱格式错误',    
        ];
        
    }
    

    验证数据

    下面是一个典型的验证数据的例子:

    $rule = [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
        'email' => 'email',
    ];
    
    $msg = [
        'name.require' => '名称必须',
        'name.max'     => '名称最多不能超过25个字符',
        'age.number'   => '年龄必须是数字',
        'age.between'  => '年龄只能在1-120之间',
        'email'        => '邮箱格式错误',
    ];
    
    $data = [
        'name'  => 'thinkphp',
        'age'   => 10,
        'email' => 'thinkphp@qq.com',
    ];
    
    $validate = new Validate($rule, $msg);
    $result   = $validate->check($data);
    

    如果需要批量验证,可以使用:

    $validate = new Validate($rule, $msg);
    $result   = $validate->batch()->check($data);
    

    批量验证如果验证不通过,返回的是一个错误信息的数组。

    如果你定义了User验证器类的话,可以使用下面的验证代码:

    $data = [
        'name'  => 'thinkphp',
        'age'   => 10,
        'email' => 'thinkphp@qq.com',
    ];
    $validate = Loader::validate('User');
    if(!$validate->check($data)){
        dump($validate->getError());
    }
    

    闭包函数验证

    可以对某个字段使用闭包验证,例如:

    $validate = new 	hinkValidate([
        'name'  => function($value,$data) { 
            return 'thinkphp'==$value ? true : false;
        },
    ]);
    

    第一个参数是当前字段的值,第二个参数是全部数据

    自定义验证规则

    系统内置了一些常用的规则,如果还不够用,可以自己扩展验证规则。

    如果使用了验证器的话,可以直接在验证器类添加自己的验证方法,例如:

    namespace appindexvalidate;
    
    use thinkValidate;
    
    class User extends Validate
    {
        protected $rule = [
            'name'  =>  'checkName:thinkphp',
            'email' =>  'email',
        ];
        
        protected $message = [
            'name'  =>  '用户名必须',
            'email' =>  '邮箱格式错误',
        ];
        
        // 自定义验证规则
        protected function checkName($value,$rule,$data)
        {
            return $rule == $value ? true : '名称错误';
        }
    }
    

    验证方法可以传入的参数共有5个(后面三个根据情况选用),依次为:

    • 验证数据
    • 验证规则
    • 全部数据(数组)
    • 字段名
    • 字段描述

    并且需要注意的是,自定义的验证规则方法名不能和已有的规则冲突。

    接下来,就可以这样进行验证:

    $validate = Loader::validate('User');
    if(!$validate->check($data)){
        dump($validate->getError());
    }
    

    如果没有使用验证器类,则支持使用extend方法扩展验证规则,例如:

    $validate = new Validate(['name' => 'checkName:1']);
    $validate->extend('checkName', function ($value, $rule) {
        return $rule == $value ? true : '名称错误';
    });
    $data   = ['name' => 1];
    $result = $validate->check($data);
    

    支持批量注册验证规则,例如:

    $validate = new Validate(['name' => 'checkName:1']);
    $validate->extend([
        'checkName'=> function ($value, $rule) {
        return $rule == $value ? true : '名称错误';
    },
        'checkStatus'=> [$this,'checkStatus']
    ]);
    $data   = ['name' => 1];
    $result = $validate->check($data);
    

    设置字段信息

    V5.0.4+版本开始,验证类的架构方法支持传入field参数批量设置字段的描述信息,例如:

    $rule = [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
        'email' => 'email',
    ];
    
    $field = [
        'name'  => '名称',
        'age'   => '年龄',
        'email' => '邮箱',	
    ];
    
    $data = [
        'name'  => 'thinkphp',
        'age'   => 10,
        'email' => 'thinkphp@qq.com',
    ];
    
    $validate = new Validate($rule, [] , $field);
    $result   = $validate->check($data);
  • 相关阅读:
    XML基础(二)
    XML基础(一)
    转载:数据库应用开发工具Toad使用笔记
    Oracle数据库获取一行记录中某几个字段的最大值/最小值函数
    设置Android让EditText不自动获取焦点
    android TextView selector点击样式改变
    Jenkins build java app under redhat
    Yum
    git windows
    jenkins redhat installation using war file .
  • 原文地址:https://www.cnblogs.com/mmore123/p/12881318.html
Copyright © 2020-2023  润新知