TP5数据验证层

数据验证层,顾名思义,负责验证数据的,主要是前端传递过来的参数。作为后端工程师,不要相信任何前端传递过来的数据,这点一定要切记。
在以前,写验证一般会写到控制器中,写一堆IF,或者直接传入到相应逻辑类中使用的时候验证,这样是很不灵活的,例如同样一个ID的判断,同样是必填和正整数,按以前的写法就需要在不同的地方写同样的代码,虽然可能只有两三行代码,但是位置多了也很恐怖,更可怕的是万一有一天说这个ID必须小于100。
TP5的验证类validate使用是非常简单的,NEW时候传入规则,然后调用check方法传入验证数据就可以了,支持批量验证。可以通过getError方法获取未通过验证的信息。

	 $validate = new \think\Validate([
                ['id', 'require', '必填'],
            ]);
            //验证部分数据合法性
  if (!$validate->check($post)) {
       $this->error('提交失败:' . $validate->getError());
  }
  不过这样写下去代码量也会很多。今天学的一个是专门定义一个验证层,把验证代码放到单独的类里,控制器引用的时候只需要new自定义验证类就可以了。
  结构如下
  BaseValidate 继承Validate,负责调用验证方法。
  IDMustBePositiveInt继承BaseValidate,定义验证规则。

BaseValidate类:

    <?php
namespace app\api\validate;
use think\Validate;

/**
 * Class BaseValidate
 * 验证类的基类
 */
class BaseValidate extends Validate
{
    /**
     * 检测所有客户端发来的参数是否符合验证类规则
     * 基类定义了很多自定义验证方法
     * 这些自定义验证方法其实,也可以直接调用
     * @throws ParameterException
     * @return true
     */
    public function goCheck()
    {
        //必须设置contetn-type:application/json
        $request = Request::instance();
        $params = $request->param();
        $params['token'] = $request->header('token');

        if (!$this->check($params)) {
            $exception = new ParameterException(
                [
                    // $this->error有一个问题,并不是一定返回数组,需要判断
                    'msg' => is_array($this->error) ? implode(
                        ';', $this->error) : $this->error,
                ]);
            throw $exception;
        }
        return true;
    }
}

IDMustBePositiveInt类

<?php
namespace app\api\validate;
class IDMustBePositiveInt extends BaseValidate
{
    protected $rule = [
        'id' => 'require|isPositiveInteger',
    ];
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值