フォームバリデーションで配列の入力値を使用する際、その配列の属性名 (attribute) を設定していないと 「member.2.nameは必須です」
のような表示になってしまう。
属性名を設定しておけば通常のバリデーション同様には使える。
以下のようなバリデーションルールを想定する。(大幅に簡略化してる)
1 2 3 4 5 |
[ 'member' => 'array', 'member.*.email' => 'email|required', 'member.*.name' => 'string|required', ] |
バリデーションにこの翻訳ファイルを使用している場合、
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "member": [ { "name":"かばんちゃん", "email": "kaban@kemono-friends.jp" }, { "name":"サーバルちゃん", "email": "メールアドレスってなーに?" } ] } |
というデータを投げると、「member.1.emailを正しいメールアドレスにしてください。」というエラーメッセージが返される。
このルールの場合、Laravelは配列の入力について、 member.1.email
, member.*.email
の順に定義されているattribute1を走査し、存在すればそれを、しなければmember.1.emailをそのまま表示する。
つまり、'member.*.email' => 'メンバーのメールアドレス'
としておけば「メンバーのメールアドレスを正しいメールアドレスにしてください。」と表示される。(日本語として気なるが)
inputの直下にバリデメッセージを表示していれば問題ないかもしれないが、「2つ目のメールアドレス」としたいこともあるだろう。
ところが残念ながら、そのような機能は用意されていない。
Replacerを追加すれば強引に対応することは出来るようだが、デフォルトのreplacerが無視される(呼び出してやればいいんだが)上、そもそも数字をどうやって拾いに行くかという問題もあるのであまりいい解決策ではない。
- バリデータに渡した属性名、翻訳ファイル ↩