🤷♂️
【Laravel】「○○日時には、todayより後の日付を指定してください。」...だと?
概要
LaravelのフォームリクエストでPOSTした日付情報のバリデーションに
「今日より後の日付になっているかどうか」
のルールを設定したいので、Laravelに用意されているafter
を使って
app/Http/Requests/Front/SampleRequest.php
'sample_date' => 'date|after:today'
こう書いたんですけど、バリデーションメッセージは下のように...
"todayより"...(ルー大柴かい🤷♂️)
というわけでtodayを今日に変えます。
環境
$ composer -V
Composer version 2.0.8 2020-12-03 17:20:38
$ php artisan --version
Laravel Framework 8.21.0
after
のバリデーションメッセージ
resources/lang/ja/validation.php
'after' => ':attributeには、:dateより後の日付を指定してください。'
:attribute
はフォームリクエストのattributes
メソッドで設定できているけど、:date
にtoday
という文字列が入ってしまっている様子。。
「today」を「今日」に変える方法
僕が見つけたのはこの3つの方法です。
- フォームリクエストで定義
- 言語ファイルのcustomで定義
- 言語ファイルのvaluesで定義
1.フォームリクエストで定義
まずはバリデーションを定義しているフォームリクエストのmessages
メソッドにこのフォームリクエスト専用のバリデーションメッセージを設定する方法です。
フォームリクエストに定義
public function messages()
{
return [
'sample_date.after' => '○○日には、今日より後の日付を指定してください。',
];
}
2.言語ファイルのcustomで定義
次は言語ファイル(resources/lang/ja/validation.php
)のcustom
で共通して使えるバリデーションメッセージを設定する方法です。
言語ファイルのcustomで定義
'custom' => [
'sample_date' => [
'after' => '○○日には、今日より後の日付を指定してください。',
],
],
ちなみに言語ファイルはこちら
3.言語ファイルのvaluesで定義
3つ目は言語ファイル(resources/lang/ja/validation.php
)のvalues
に:date
に当てはめる文字列を設定する方法です。
言語ファイルのvaluesで定義
'values' => [
'sample_date' => [
'today' => '今日'
],
],
変更後のバリデーションメッセージ
できました!!
脱ルー大柴!!
まとめ
個人的に3の「言語ファイルのvaluesで定義」はパッと見コードを見ても理解しにくいかなと思ったので、1か2が良いかなと思っています。
あとはそのプロジェクトの方針によってカスタムメッセージを
- フォームリクエスト
- 言語ファイル
のどちらに追加していくのかは決めれば良いのかなと思います。
Discussion