Laravel中使⽤FormRequest进⾏表单验证及对验证异常进⾏
⾃定义处理
本⽂主要展⽰的是,单独抽离,验证层(即参数验证)
为了简化controller参数验证,我们单独建⽴⼀个⽂件夹,作为我们参数层验证;具体异常抛出,以及Form Request的执⾏laravel官⽅⽂档已经很详细了,⾃⾏百度.下⾯仅展⽰案例,便于快速上⼿使⽤:
1.新建Requests⽂件夹
2.然后在新建NavRequest,参数验证类,继承FormRequest
<?php
namespace App\Http\Requests\Nav;
use Illuminate\Foundation\Http\FormRequest;
class NavRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$rules = [
'h5_id' => 'required |exists:h5_template,h5_id',
'font_color'=>'string|nullable',
'select_color'=>'string|nullable',
'background_color'=>'string|nullable',
'position'=>'int|required| between:0,1'
];
return $rules;
}
public function messages()
{
$message = [
'quired' =>'h5_id必须填写',
'ists' =>'h5_id不存在!',
'quired' =>'请选择位置!'
];
return $message;
}
}
第⼀个⽅法:authorize(),控制⽤户访问权限
第⼆个⽅法:$rules(),返回验证的数组
第三个⽅法:$message(),返回⾃定义的错误信息
3.控制器⾥⾯\
传统上我们这样使⽤,但是造成每个controller都需要对这些参数单独判断.代码复⽤率不⾼.
public function navSet(Request $request)
{
$validator = Validator::make($request->all(), [
'h5_id' => 'required |int',
'font_color'=>'string|nullable',
'select_color'=>'string|nullable',
'background_color'=>'string|nullable',
'position'=>'int|required| between:0,1'
]);
if ($validator->fails()) {
return $this->output(null,'参数有误,请重试!',500);
}
$request_params=$request->all();
//接下来实现你的业务逻辑....
}
当我们抽离出来参数验证层的时候,
public function navSet(NavRequest $request)//将你抽离的参数层绑定到这⾥
{
$request_params=$request->all();
//接下来处理你的业务逻辑...
}
这样不管你在哪⾥绑定Navrequest这个参数验证类的时候,都会对参数进⾏验证
重定向过多是什么意思4.验证错误信息的返回
在这个地⽅我是写接⼝的,⽆论如何都接收不到错误信息.然后查看FoemRequest的错误返回信息:
看到这⾥这样写:如下图.
protected function failedValidation(Validator $validator)
{
throw (new ValidationException($validator))
->errorBag($this->errorBag)
->redirectTo($this->getRedirectUrl());
}
意思是重定向错误信息,但是作为接⼝开发者,很多时候我们需要返回前端指定的json数据,所以我们可以重写这个⽅法如下;(特别注意,⼀开始没有重写栽了⼀个坑)
//1.在这⾥可以重新定义⼀个requestController类,,
//2.然后让他继承 FormRequest,
//3.最后重写FormRequest这个基类的failedvalidation⽅法
class RequestController extends FormRequest
{
protected function failedValidation(Validator $validator) {
$error= $validator->errors()->all();
throw new HttpResponseException(response()->json(['msg'=>'error','code'=>'500','data'=>$error[0]], 500));
}
}
这样当你的参数不符合⾃定义的验证规则的时候,就会在你的路由⾥⾯返回你⾃定义的错误信息了.
5.postman错误信息展⽰
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论