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());
    }

  • 相关阅读:
    SSIS常用的包—XML任务,SQL分析服务执行DDL和Processing任务
    SQL点滴7—使用SQL Server的attach功能出现错误及解决方法
    SSIS中的容器和数据流—数据目的
    SQL点滴8—the account is currently locked out. The system administrator can unlock it.
    SSIS常用的包—WMI数据读取任务和WMI事件监听任务
    Microsoft SQL Server Integration Service文章总结
    SSIS常用的包—Web服务任务
    SQL点滴6—“微软不认识闰年2月29日”&字符"N"的作用
    SSIS中的容器和数据流—数据源
    YUI Grids实现自定义宽度的Template
  • 原文地址:https://www.cnblogs.com/q1104460935/p/6916342.html
Copyright © 2011-2022 走看看