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


通常在項目中,我們會對大量的前端提交過來的表單進行驗證,如果不通過,則返回錯誤信息。

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

但是返回的json格式並不是我們想要的,這個時候,我們就需要自定義返回錯誤結果。

先創建一個表單請求類:

php artisan make:request TestRequest

然后在 rules() 和 messages() 方法里填寫自已的驗證規則和消息

<?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() 方法用來處理驗證失敗,我們重寫父類方法,來實現自已的返回。

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,不要搞錯了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM