【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' => '指定されたデータは無効です。',
];
|
こうすることにより多言語化対応されます。