Laravel

Laravel9のフォームで[ ]付きの多次元配列をバリデーションする方法

※本ページはアフィリエイトプログラムによる収益を得ています

この記事は現在進行形で執筆中です。作業しながら備忘録としてメモ書きしてます。

Laravelでアンケートサイトを作成しているのですが、name属性から送られる値に配列の値を入れるとバリデーションがうまくいかずハマったので忘れないうちに書き残します。

結論からいうと、
たとえば以下の入力で必須入力のバリデーションをかける場合

<input type="text" name="item[1]" value="">
<input type="text" name="item[2]" value="">

このような大括弧[ ]でくくった配列をそのままつっこむとうまくいきません。

$validate_rule = [
  'item[1]' => 'required',
  'item[2]' => 'required'
];
$this->validate($request, $validate_rule);

正解はこれです。

$validate_rule = [
  'item.1' => 'required',
  'item.2' => 'required'
];
$this->validate($request, $validate_rule);

また、配列の値全てに必須入力のバリデーションをかける場合はアスタリスク * を使うことで一括チェックが可能です

$validate_rule = [
  'item.*' => 'required'
];
$this->validate($request, $validate_rule);

もうこれで配列の値へのバリデーションも怖くないですね。

必須入力以外のバリデーションについてもまだいろいろ調べ中なので、今やってる作業が終わったらもう少し細かく追記していきたいと思います。