创建表单请求验证
php artisan make:request ProductionType
编写验证器逻辑
<?php namespace App\Http\Requests; use App\Http\Requests\Request; class ProductionType extends Request { /** * Determine if the user is authorized to make this request. * @return bool * @Author liulibo * @Date 2019-08-27 */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * @return array * @Author liulibo * @Date 2019-08-27 */ public function rules() { return [ 'name'=>'required|unique:production_type,name,'.Request::input('id'), 'status'=>'required' ]; } /** * 获取已定义验证规则的错误消息。 * @return array * @Author liulibo * @Date 2019-08-27 */ public function messages() { return [ 'name.required' => '名称必填', 'name.unique' => '名称重复', 'status.required' => '状态必填', ]; } }
授权表单请求
表单的请求类内包含了 authorize 方法。可以针对授权编写自定义逻辑代码:
public function authorize() { return true; }
自定义错误消息信息:
我们可以编写某种验证错误发生时,返回给前端的消息
public function messages() { return [ 'name.required' => '名称必填', 'name.unique' => '名称重复', 'status.required' => '状态必填', ]; }
验证规则是如何运行的呢?你所需要做的就是在控制器方法中类型提示传入的请求。在调用控制器方法之前验证传入的表单请求,这意味着你不需要在控制器中写任何验证逻辑:
/** * 新增/编辑成品类型 * @param \App\Http\Requests\ProductionType $request * @return \Illuminate\Http\JsonResponse * @Author liulibo * @Date 2019-08-27 */ public function add(\App\Http\Requests\ProductionType $request) { //通过验证后的数据 }
如果验证失败,就会生成一个让用户返回到先前的位置的重定向响应。这些错误也会被闪存到 session 中,以便这些错误都可以在页面中显示出来。如果传入的请求是 AJAX,会向用户返回具有 422 状态代码和验证错误信息的 JSON 数据的 HTTP 响应。
我们可以改写request基类,定义我们希望返回给前端的数据结构
/** * 捕获request抛出的验证异常 * @OverRide * @param Validator $validator * @Author liulibo * @Date 2019-08-27 */ protected function failedValidation(Validator $validator) { throw (new HttpResponseException(response()->json([ 'rtn'=>1, 'msg'=>$validator->errors(), ],200))); }