zoukankan      html  css  js  c++  java
  • 验证-静态,模型,控制器

    静态调用

    如果需要使用内置的规则验证单个数据,可以使用静态调用的方式。

    // 日期格式验证
    Validate::dateFormat('2016-03-09','Y-m-d'); // true
    // 验证是否有效的日期
    Validate::is('2016-06-03','date'); // true
    // 验证是否有效邮箱地址
    Validate::is('thinkphp@qq.com','email'); // true
    // 验证是否在某个范围
    Validate::in('a',['a','b','c']); // true
    // 验证是否大于某个值
    Validate::gt(10,8); // true
    // 正则验证
    Validate::regex(100,'d+'); // true

    控制器验证

    如果你需要在控制器中进行验证,并且继承了 hinkController的话,可以调用控制器类提供的validate方法进行验证,如下:

    $result = $this->validate(
        [
            'name'  => 'thinkphp',
            'email' => 'thinkphp@qq.com',
        ],
        [
            'name'  => 'require|max:25',
            'email'   => 'email',
        ]);
    if(true !== $result){
        // 验证失败 输出错误信息
        dump($result);
    }

    如果定义了验证器类的话,例如:

    namespace appindexvalidate;
    
    use thinkValidate;
    
    class User extends Validate
    {
        protected $rule = [
            'name'  =>  'require|max:25',
            'email' =>  'email',
        ];
    
        protected $message = [
            'name.require'  =>  '用户名必须',
            'email' =>  '邮箱格式错误',
        ];
    
        protected $scene = [
            'add'   =>  ['name','email'],
            'edit'  =>  ['email'],
        ];
    }

    控制器中的验证代码可以简化为:

    $result = $this->validate($data,'User');
    if(true !== $result){
        // 验证失败 输出错误信息
        dump($result);
    }

    如果要使用场景,可以使用:

    $result = $this->validate($data,'User.edit');
    if(true !== $result){
        // 验证失败 输出错误信息
        dump($result);
    }

    在validate方法中还支持做一些前置的操作回调,使用方式如下:

    $result = $this->validate($data,'User.edit',[],[$this,'some']);
    if(true !== $result){
        // 验证失败 输出错误信息
        dump($result);
    }

    模型验证

    在模型中的验证方式如下:

    $User = new User;
    $result = $User->validate(
        [
            'name'  => 'require|max:25',
            'email'   => 'email',
        ],
        [
            'name.require' => '名称必须',
            'name.max'     => '名称最多不能超过25个字符',
            'email'        => '邮箱格式错误',
        ]
    )->save($data);
    if(false === $result){
        // 验证失败 输出错误信息
        dump($User->getError());
    }

    第二个参数如果不传的话,则采用默认的错误提示信息。

    如果使用下面的验证器类的话:

    namespace appindexvalidate;
    use thinkValidate;
    class User extends Validate
    {
        protected $rule = [
            'name'  =>  'require|max:25',
            'email' =>  'email',
        ];
    
        protected $message = [
            'name.require'  =>  '用户名必须',
            'email' =>  '邮箱格式错误',
        ];
    
        protected $scene = [
            'add'   =>  ['name','email'],
            'edit'  =>  ['email'],
        ];    
    }

    模型验证代码可以简化为:

    $User = new User;
    // 调用当前模型对应的User验证器类进行数据验证
    $result = $User->validate(true)->save($data);
    if(false === $result){
        // 验证失败 输出错误信息
        dump($User->getError());
    }

    如果需要调用的验证器类和当前的模型名称不一致,则可以使用:

    $User = new User;
    // 调用Member验证器类进行数据验证
    $result = $User->validate('Member')->save($data);
    if(false === $result){
        // 验证失败 输出错误信息
        dump($User->getError());
    }

  • 相关阅读:
    Duilib 源码分析(二)消息处理
    Duilib 源码分析(一)示例推演
    2021 Duilib最新入门教程(七)Duilib处理消息
    2021 Duilib最新入门教程(六)Duilib界面设计
    2021 Duilib最新入门教程(五)Duilib调用静态库示例
    2021 Duilib最新入门教程(四)Duilib编译静态库
    源文件(cpp)、静态库(lib)、动态库(dll)
    2021 Duilib最新入门教程(三)Duilib调用动态库示例
    supernova-SN_TV MUF简介
    jieba+pyecharts 词云图应用
  • 原文地址:https://www.cnblogs.com/q1104460935/p/6916342.html
Copyright © 2011-2022 走看看