Laravel GET,POST 請求 API 接口,使用自定義表單驗證,驗證失敗跳轉回首頁的問題記錄

這個問題是因爲 FormRequest 中在驗證規則失敗時,會調用 failedValidation 方法,該方法的代碼:

namespace Illuminate\Foundation\Http;

class FormRequest extends Request implements ValidatesWhenResolved

/**
 * Handle a failed validation attempt.
 *
 * @param  \Illuminate\Contracts\Validation\Validator  $validator
 * @return void
 ``*
 * @throws \Illuminate\Validation\ValidationException
 */
protected function failedValidation(Validator $validator)
{
    throw (new ValidationException($validator))
                ->errorBag($this->errorBag)
                ->redirectTo($this->getRedirectUrl());// 最終在這裏會重定向
}

解決的方法是在自定義的表單驗證類重寫這個方法。

use Illuminate\Http\JsonResponse;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

protected function failedValidation(Validator $validator)
{
    $error= $validator->errors()->all();
    throw new HttpResponseException($this->failJson(400, $error));
}

protected function failJson(int $code, array $errors) : JsonResponse
{
    return response()->json(
        [
            'code' => $code,
            'errors' => $errors,
        ]
    );
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章