JavaScriptを有効にしてください

【Laravel】APIのエラーメッセージ「The given data was invalid.」を多言語か対応する

 ·  ☕ 2 分で読めます

【Laravel】APIのエラーメッセージ「The given data was invalid.」を多言語か対応する

Laravel のAPIのエラーメッセージ「The given data was invalid.」を多言語か対応する。
これは僕がクソ実装されていることを忘れないための記事です。

前置き

確認環境は Laravel 9 になります。

APIのバリデーションエラー時に The given data was invalid. が出力されます。
こちらコード上にハードコーティングされております。
こんなクソ実装本当に辞めて欲しい🪓(๑╹ω╹ ๑ )

ですので多言語化対応したところでこのエラーメッセージは変わりません。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

namespace App\Http\Requests\Api;

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

abstract class ApiRequest extends FormRequest
{
    /**
     * Handle a failed validation attempt.
     *
     * @param  Validator  $validator
     * @return void
     *
     * @throws HttpResponseException
     */
    protected function failedValidation(Validator $validator)
    {
        $data = [
            'message' => __('The given data was invalid.'),
            'errors' => $validator->errors()->toArray(),
        ];

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

多言語化対応

ハードコーティングされている箇所を多言語かさせます。
以下のようにして validation の言語ファイルから取得するようにします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

namespace App\Http\Requests\Api;

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

abstract class ApiRequest extends FormRequest
{
    /**
     * Handle a failed validation attempt.
     *
     * @param  Validator  $validator
     * @return void
     *
     * @throws HttpResponseException
     */
    protected function failedValidation(Validator $validator)
    {
        $data = [
            'message' => __('validation.invalid'),
            'errors' => $validator->errors()->toArray(),
        ];

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

言語ファイル側には invalid のメッセージを追加しておきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php

return [
    /*
    |--------------------------------------------------------------------------
    | バリデーションメッセージ
    |--------------------------------------------------------------------------
    | バリデーションエラーメッセージ
    */
    'invalid' => '指定されたデータは無効です。',
];

こうすることにより多言語化対応されます。

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer