やりかた
APIでバリデーションエラーを受け取るため、failedValidation
メソッドを実装する
- LoginRequest.php
<?php
namespace App\Http\Requests\Api;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
class LoginRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|string|email|max:255',
'password' => 'required|string|min:8',
];
}
// ⭐️ 追加
/**
* バリデーション失敗時
*
* @param Validator $validator
* @return void
* @throw HttpResponseException
*/
protected function failedValidation(Validator $validator)
{
throw new HttpResponseException(
response()->json($validator->errors()->toArray(), 422)
);
}
}
Laravelのフォームバリデーションでは入力値が不正な時はレスポンスを返すのではなくリダイレクトしてしまう
これをREST API向けにレスポンスを返すようにカスタマイズした