フォームのフィールドが配列の場合のバリデーションについてのメモです。
###ドット記法
配列に対してバリデーションを行うためにはドット記法を使い、.
で配列の階層を表します。また*
で配列内すべてを表します。
//photos[profile]フィールドを指定
$validator = Validator::make($request->all(), [
'photos.profile' => 'required|image',
]);
//keywordフィールドすべてを指定
$validator = Validator::make($request->all(), [
'keyword.*' => 'required|max:20',
]);
####エラーメッセージの取得
Illuminate\Support\ViewErrorBag {
#bags: array:1 [
"default" => Illuminate\Support\MessageBag {
#messages: array:2 [
"keyword.0" => array:1 [
0 => "キーワードは、20文字以下で指定してください。"
]
"keyword.1" => array:1 [
0 => "キーワードは、20文字以下で指定してください。"
]
"keyword.2" => array:1 [
0 => "キーワードは、20文字以下で指定してください。"
]
]
#format: ":message"
}
]
}
配列にバリデーションを設定した場合、エラーメッセージも配列で返ってくるため、取得もドット記法で行います。
foreach ($errors->get('keyword.*') as $messages) {
foreach ($messages as $message){
//
}
}