【Laravel】配列のリクエストに対してバリデーションを実施したときのエラーメッセージに配列の位置を出力する方法

はじめに

Laravelで、
配列のリクエストに対してバリデーションを実施したときのエラーメッセージに、
配列の位置を出力する方法をご紹介します。

やりたいことは、

[
    'member' => [
        [
            'firstName' => '',                // 必須エラー
            'lastName' => '',                 // 必須エラー
            'email' => ''                     // 必須エラー
        ],
        [
            'firstName' => 'Taro',
            'lastName' => '',                 // 必須エラー
            'email' => ''                     // 必須エラー
        ],
        [
            'firstName' => 'Hanako',
            'lastName' => 'Yamada',
            'email' => ''                     // 必須エラー
        ]
    ]
]

のような配列のリクエストに対して、

1件目の会員の名は必須です。
1件目の会員の姓は必須です。
2件目の会員の姓は必須です。
1件目の会員のEメールは必須です。
2件目の会員のEメールは必須です。
3件目の会員のEメールは必須です。

というエラーメッセージを出力することです。

環境

  • PHP 8.2.3
  • Laravel Framework 10.24.0

サンプルコード

以下、FormRequestクラスのサンプルです。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class SampleRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(): array
    {
        return [
            // 名
            'member.*.firstName' => [
                'required'
            ],
            // 姓
            'member.*.lastName' => [
                'required'
            ],
            // Eメール
            'member.*.email' => [
                'required'
            ]
        ];
    }
}

resources/lang/ja/validation.phpには以下のように定義します。

return [
    'required' => ':attributeは必須です。',

    'attributes' => [
        'member.*.firstName' => ':position件目の会員の名',
        'member.*.lastName' => ':position件目の会員の姓',
        'member.*.email' => ':position件目の会員のEメール'
    ]
];

ポイントは:positionで、この:positionに配列の位置が埋め込まれます。
なお、:positionは1始点ですが、:indexとすると0始点となります。

参考リンク:バリデーション 10.x Laravel


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です