Laravel 5.6 で、Validation Message を日本語化したときに、フォーム毎に項目名を分けたいとき

開発の時に、Qiita(の中の人)にはいつもお世話になっているので、私も、「ググっても解決方法が無くて、しょうが無いから自己解決した問題」を、後学の為にブログにアップしていこうと思います。
(って程、大した話じゃ無いんだけどね。)

Laravel の Validation を日本語化する話題は結構ある。

Qiita@Rock22
→ Laravel5でのValidationMessageを日本語化してみた

RitoLabo
→ Laravelのvalidationメソッドでバリデーションを実装する入門編

Laravel公式
→ Laravel 5.6 validation.php言語ファイル

で、それらの実装を施した後に、当方の環境では問題があった。

「違うフォーム(の違う訳語)で、同じ’attributes’を使用していた場合にどうやって訳語を使い分けるんだ?」

今回の案件なんだけど、顧客入力用フォームの「氏名」と不動産物件入力用フォームの「物件名」は、どちらも’attributes’は、”name”だった。

DBも項目名には単純な名前を入れることにしているので、そこから → Model → Controller → フォーム と名前を引き継いでいるだけで、単純にフォームの段階で分ければいいんだけどね♪

で、

  • 顧客入力用フォームからのエラーの場合には、「”氏名”が違います」
  • 不動産物件入力用フォームからのエラーの場合には、「”物件名”が違います」

と使い分けたい。

ま、解決方法は簡単で、以下を読めばいいんだけど、

/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesRequests.php

  public function validate(Request $request, array $rules,
        array $messages = [], array $customAttributes = [])

とある。

要は4番目の引数として、’attributes’を渡せばいいだけ。
(実際には第1引数は、$requestなので、使い方としては第3引数)

顧客入力用には、

/laravel/app/Http/Controllers/CustomerController.php

  $validatedData = $request->validate([
      ’name’ => ‘required’,
    ],[],[
      ’name’ => ‘氏名’,
    ]);

不動産物件入力用には、

/laravel/app/Http/Controllers/RealEstateController.php

  $validatedData = $request->validate([
      ’name’ => ‘required’,
    ],[],[
      ’name’ => ‘物件名’,
    ]);

とすればいい。

そこで渡さない場合には、上記リンクを参考にして日本語化したときの

/laravel/resources/lang/ja/validation.php

  ’attributes’ => [
    ’name’ =>’名前’,
  ],

が参照されるので、日本語化の時に使った労力は無駄にはならない。

って、まあ、大した話じゃなくて、書き方もQiitaっぽくなかったけど、徐々に慣れていくから許してね♪

スポンサーリンク
レクタングル(大)

シェアする

フォローする

スポンサーリンク
レクタングル(大)