基本使用
新建 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;
}
所有验证器均继承 BaseValidate,UsersValidate 修改如下
<?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('注册成功');
}
待续...