tp6 API开发笔记02-验证器

401 阅读1分钟

基本使用

新建 UserValidate.php 定义验证规则 年龄必须为数字并且在1-120之间,验证场景 reg

<?php

namespace app\api\validate;

use think\Validate;

class UsersValidate extends Validate
{
    protected $rule = [
        'age|年龄' => 'number|between:1,120'
    ];

    protected $scene = [
        'reg' => ['age'],
    ];
}

控制器中使用,问题:重复率高不利于维护

public function reg()
{
    $userValidate = new UsersValidate();
    $check = $userValidate->check(['age' => 0]);
    if (!$check) ApiException($userValidate->getError(), 1000);
    return self::showResCodeWithOutData('注册成功');
}

优化思路

封装通用的数据验证方法,针对验证器错误使用统一的业务状态码。新建验证器 BaseValidate,并继承think\Validate

<?php

namespace app\api\validate;

use think\Validate;

class BaseValidate extends Validate
{

}

新增 goCheck方法,对验证流程封装并新增业务状态码

// 验证器效验失败
const ERR_VALIDATE = 1000;
/**
 * 通用数据验证方法
 * @param string $scene 验证场景
 * @return bool
 * @throws \app\api\common\BaseException
 */
public function goCheck($scene = '')
{
    //获取所有请求参数
    $params = input();
    //是否需要验证场景
    $check = $scene ? $this->scene($scene)->check($params) : $this->check($params);
    if (!$check) { // 验证不通过
        ApiException($this->getError(), ERR_VALIDATE);
    }
    return true;
}

所有验证器均继承 BaseValidateUsersValidate 修改如下

<?php

namespace app\api\validate;

class UsersValidate extends BaseValidate
{
    protected $rule = [
        'age|年龄' => 'number|between:1,120'
    ];

    protected $scene = [
        'reg' => ['age'],
    ];
}

控制器中使用

public function reg()
{
    (new UsersValidate())->goCheck('reg');
    return self::showResCodeWithOutData('注册成功');
}

image.png

image.png

待续...