はじめに
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