本文主要展示的是,单独抽离,验证层(即参数验证)
为了简化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 = [
'h5_id.required' =>'h5_id必须填写',
'h5_id.exists' =>'h5_id不存在!',
'position.required' =>'请选择位置!'
];
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错误信息展示
扫描二维码关注公众号,回复:
6759406 查看本文章