Laravel自定义表单验证

 

创建表单请求验证

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)));

    }