ThinkPHP6 封装全局验证层的方法

今天看到了一个全局验证层的代码封装,感觉挺实用的,所以在这里做个记录。

首先创建基类验证器,和一个需要使用的验证其,执行如下代码:

//创建基类验证器
php think make:validate BaseVlidate
//创建一个用户登录验证器
php think make:validate LoginVlidate

两个验证器创建好了之后我们就开始写代码封装了。

LoginVlidate.php文件代码如下:

<?php
declare (strict_types = 1);

namespace app\validate;


class LoginVlidate extends BaseVlidate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        'username'=>'require',
        'password'=>'require',
        'email'=>'require|email'
    ];

    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
        'username.require'=>'用户名必须填写',
        'email.email'=>'邮箱格式不正确',
        'email.require'=>'邮箱不能为空'
    ];
//    验证场景
    protected $scene = [
        //登录场景验证
        'login'  =>  ['username','email'],
    ];
}

BaseVlidate.php文件代码如下:

<?php
declare (strict_types = 1);

namespace app\validate;

use think\Validate;
use app\lib\exception\BaseException;

class BaseVlidate extends Validate
{
    public function goCheck($scene = ''){
        //获取接收到的数据
        $params = request()->param();
        //用三元运算符判断是否存在场景验证,并返回给$check变量
        $check = empty($scene)?$this->check($params):$this->scene($scene)->check($params);
        //开始判断验证
        if(!$check){
            //这里需要注意的是我用的异常返回,也可以使用return,但是方法里面需要接收返回的return数据
            throw new BaseException(['message'=>$this->getError(),'code'=>500,'errorCode'=>10000]);
        }
        halt($params);
    }
}

定义好了之后我们只需要在方法里面执行验证即可。

//首先引入我们的验证器(验证器需继承基类验证器)
use app\validate\LoginVlidate;

下面为控制器里面的方法调用内容--------------

//现在我们实例化验证器并调用(无场景验证)
(new UserVlidate())->goCheck();

//现在我们实例化验证器并调用(带场景验证)
(new UserVlidate())->goCheck('login');

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值