Laravel 5.7 APIのバリデーションエラー時のレスポンスをカスタマイズする

Laravel

Laravelで作成したAPIのバリデーションをFormRequestを使用して実装すると、エラーのレスポンスは以下のようになります。

{
    "message": "The given data was invalid.",
    "errors": {
        "tel": [
            "電話番号は必ず指定してください。"
        ]
    }
}

エラー内容はfailedValidationを使用するとカスタマイズすることができますので、やり方をまとめたいと思います。

failedValidationの内容は、APIで共有と思いますのでトレイとを使用します。

ApiValidationRequest

ApiValidationRequestというトレイトを作成して、その中でレスポンスの内容を生成してHttpResponseExceptionをスローします。

内容は任意で変更できます。

<?php
namespace App\Http\Requests;

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

trait ApiValidationRequest
{
    protected function failedValidation(Validator $validator)
    {
        $response = [
            'status' => 500,
            'result' => [
                'errors' => $validator->errors()->toArray()
            ]
        ];

        throw new HttpResponseException(response()->json($response, 500));
    }
}

use で呼び出すだけ

後は使用するFormRequestでuseするだけです。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UserRequest extends FormRequest
{
    use ApiValidationRequest;

結果

{
    "status": 500,
    "result": {
        "errors": {
            "address": [
                "電話番号は必ず指定してください。"
            ]
        }
    }
}

コメント