Hyperf表单数据验证器
hyperf虽然基于swoole,但是风格很像laravel,所以上手还是挺快的。
记录一下基于hyperf的表单验证器的代码。
因为写代码喜欢一把梭,所以太过解耦的验证类就不用了,太麻烦了。
简单一点。
照例,先引入一下组件包,然后发布一下配置文件
composer require hyperf/validation
发布 Translation 组件的文件:
php bin/hyperf.php vendor:publish hyperf/translationCopy to clipboardErrorCopied
发布验证器组件的文件:
php bin/hyperf.php vendor:publish hyperf/validation
至此我们的验证模块就引入进来了。
然后就是我们的验证规则的书写了。。。
我以一个验证横坐标和纵坐标的范围举个例子:
x和y分别为必传参数,且为整形,并且范围在1-1000之间,x参数意思为横坐标,y参数意思为纵坐标。
public function get_map()
{
$rules = [
'x' => 'required|integer|between:1,1000',
'y' => 'required|integer|between:1,1000'
];
$params = $this->checkValidate($this->request->all(), $rules, ['x' => '横坐标', 'y' => '纵坐标']);
$data = MapModel::get_map_by_xy((int)$params['x'], (int)$params['y']);
return $this->success($data->toArray());
}
然后看我们的checkValidate方法,这里注解 依赖注入了ValidatorFactory代理类,所以要use一下
use App\Exception\Handler\MyException;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Validation\ValidatorFactory;
/**
* @Inject()
* @var ValidatorFactory
*/
protected $validator;
function checkValidate($params = [], $rules = [], $field = [], $message = [])
{
$validate = $this->validator->make($params, $rules, $message, $field);
if ($validate->fails()) {
$this->returnError($validate->errors()->first());
}
return $params;
}
验证失败就抛出异常,验证通过就返回验证过的参数,至此我们的表单验证就搞定了,看一下效果
传递x=0&y=120
下一篇记录一下hyperf的异常处理,在我们的checkValidate中怎么拿到错误了就直接中断允许并返回错误信息
