laravel中使用FormRequest進行表單驗證,驗證異常返回JSON

一般在項目中,咱們會對大量的前端提交過來的表單進行驗證,若是不經過,則返回錯誤信息。php

前端爲了更好的體驗,都使用ajax進行表單提交,雖然 validate() 方法可以根據前端的不一樣請求方式,返回不一樣的結果。前端

可是返回的json格式並非咱們想要的,這個時候,咱們就須要自定義返回錯誤結果。ajax

先建立一個表單請求類:json

php artisan make:request TestRequest

而後在 rules() 和 messages() 方法裏填寫自已的驗證規則和消息ui

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

class TestRequest extends FormRequest
{
    /**
     * 控制訪問權限
     */
    public function authorize()
    {
        //注意,默認是false,改爲true
        return true;
    }

    /**
     * 驗證規則
     */
    public function rules()
    {
        return [
            'name' => 'required',
            'pwd' => 'required',
        ];
    }

    /**
     * 驗證消息
     */
    public function messages()
    {
        return [
            'name.required' => '姓名必填',
            'pwd.required' => '密碼必填',
        ];
    }
}

注意,父類 FormRequest中的 failedValidation() 方法用來處理驗證失敗,咱們重寫父類方法,來實現自已的返回。spa

public function failedValidation(Validator $validator)
{
    throw (new HttpResponseException(response()->json([
        'status_code' => 500,
        'message' => '請求錯誤',
        'data' => $validator->errors()->first(),
    ], 200)));
}

注意 failedValidation() 方法的 $validator 參數是 Illuminate\Contracts\Validation\Validator 對象,不是 Illuminate\Validation\Validator,不要搞錯了。code

相關文章
相關標籤/搜索