Laravel5.5 FormRequestで配列チェック時にメッセージへ項目番号などを表示させたい場合のやり方
4548 ワード
やりたいこと
LaravelのFormRequestで配列をバリデートするとき。
エラーメッセージに番号をつけたかった!
前提
Laravel 5.5
PHP 7.2.9
当初の書き方
ルール設定
public function rules()
{
return [
'todos.*.title' => 'required',
'todos.*.body' => 'required'
];
}
public function messages()
{
return [
'required' => ':attributeは必須です。',
];
}
public function attributes()
{
return [
'todos.*.title' => 'タイトル',
'todos.*.body' => '内容'
];
}
POSTする値
todos[0][title] : ''<ブランク>
todos[0][body] : 'TODO内容1'
todos[1][title] : 'TODOタイトル'
todos[1][body] : ''<ブランク>
表示されるメッセージ
タイトルは必須です。
内容は必須です。
ルール設定
public function rules()
{
return [
'todos.*.title' => 'required',
'todos.*.body' => 'required'
];
}
public function messages()
{
return [
'required' => ':attributeは必須です。',
];
}
public function attributes()
{
return [
'todos.*.title' => 'タイトル',
'todos.*.body' => '内容'
];
}
POSTする値
todos[0][title] : ''<ブランク>
todos[0][body] : 'TODO内容1'
todos[1][title] : 'TODOタイトル'
todos[1][body] : ''<ブランク>
表示されるメッセージ
タイトルは必須です。
内容は必須です。
どっちのエラーなのか、ぱっと見わからないね!!!
対応
ちょっと泥臭い方法ですが。
public function attributes()
{
$attributes = [];
foreach ($this->request->get('todos') as $key => $value){
$todoNumber = $key + 1;
$attributes = array_merge(
$attributes,
[
"todos.$key.title" => "TODO No.$todoNumber タイトル",
"todos.$key.body" => "TODO No.$todoNumber 内容",
]
);
}
return $attributes;
}
表示されるメッセージ
TODO No.1 タイトルは必須です。
TODO No.2 内容は必須です。
どっちのエラーなのか、わかりやすくなりましたね!
Author And Source
この問題について(Laravel5.5 FormRequestで配列チェック時にメッセージへ項目番号などを表示させたい場合のやり方), 我々は、より多くの情報をここで見つけました https://qiita.com/yamato_sorariku/items/2d8f3e60851ce0bce637著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .