我们在对表单提交的数据做验证时,往往会使用laravel自带的validate验证器,但是今天分享给大家的一个方法,可以直接把验证规则放到一个类里面,使用时直接调用就好啦,这样方便快捷.
- step1:创建一个新的表单请求类
php artisan make:request CheckForm
- step2:在service创建一个服务层
这样我们初始的准备工作就做好啦
- step3:到CheckForm里面进行操作
打开授权
public function authorize()
{
return true;
}
正常情况下我们可以直接在这里写验证规则
public function rules()
{
return [
//
];
}
但是为了更灵活我们在这里匹配并调用其他的方法(方法名要记得用getRulesBy去开头)
rule会根据当前路由请求的控制器方法名自动判断并调用表单请求类对应的方法。
public function rules()
{
//调用方法
$ruleAction = 'getRulesBy'.$this->route()->getActionMethod();
//如果方法存在就调用
if (method_exists($this,$ruleAction)){
return $this->$ruleAction();
}else{
//如果不存在就调用其他规则
return $this->getDefaultRules();
}
}
我们捕捉到的所有错误信息都在这个方法里
protected function failedValidation(Validator $validator)
{
//获取首个报错信息
$error = $validator->errors()->first();
$response = response()->json([
'code'=>0,
'msg'=>$error,
'data'=>[]
//设置一个提示信息转中文的编码
])->setEncodingOptions(JSON_UNESCAPED_UNICODE);
throw new HttpResponseException($response);
}
- step4:设置完成后 我们就可以去BaseRequest里面去继承CheckForm了
use App\Http\Requests\CheckForm;
class BaseRequest extends CheckForm
{
}
- step5:直接在方法里写验证规则(使用getRulesBy开头),这里我们使用的是getRulesByaaa
//编写验证规则
public function getRulesbyaaa(){
return [
'name'=>'required'
];
}
//这里可以写中文返回提示
public function messages(){
return [
'name.required'=>'姓名为空'
];
}
所有东西配置完成后,我们怎么去使用呢?
我们在控制器方法里面直接引入服务类BaseRequest 就可以
public function aaa(BaseRequest $request){
}
效果给大家看看