Laravelの配列をValidateする時の指定とかエラーメッセージの加工とか
JSONで投げられる値で
{ address: "Tokyo", entries: [ {name: "", email: ""}, {name: "", email: ""} {name: "", email: ""} ] }
みたいなのをValidateしたい時。
単にVlidateすればいい場合
FormRequestのルールに
<?php public function rules() { return [ 'entries.name' => ['required'], ]; }
と書いておけばいい。
エラーメッセージは
こんな感じ。
<?php public function messages() { return [ 'entries.name.required' => '氏名は必須です。', ]; }
配列のインデックスをエラーメッセージに入れたい場合
上述の場合、
<?php public function rules() { return [ 'entries.*.name' => ['required'], ]; }
と書いてもValidateしてくれる。そして、この指定をした場合にはエラーメッセージに
<?php public function messages() { return [ 'entries.*.name.required' => '氏名は必須です。', ]; }
としておくと、エラーで返ってくるJSONが
{ errors: entries.0.name: '氏名は必須です。', entries.1.name: '氏名は必須です。',
となる。
このエラーメッセージに配列のインデックスを入れたい場合は、 stackoverflow.com を参考にして
<?php public function messages() { $messages = []; foreach ($this->request->get('entries') as $key => $entry) { $messages['entries.' . $key . '.name.required'] = . $key . 'の氏名は必須です。'; } return $messages; }
としておくといける。