【Laravel】old関数で配列を扱う時

1 min read読了の目安(約1000字

何度でも忘れ続けるのでほぼ備忘録。

oldについて

Laravelにはヘルパとしてoldという関数があります。

old関数はセッションにフラッシュデーターとして保存されている直前の入力値を取得します。
Laravel日本語ドキュメントより

バリデーションで元の画面に戻る際に、入力値を保持することができるので便利なやつです。

<input type="text" name="name" value="{{ old('name') }}">

これで、初期表示では何も表示されず、バリデーションなどで返ってきたら元の入力値が入っている状態になります。

old関数で配列を扱う時

本題です。

<input type="text" name="name[]" value="">
<input type="text" name="name[]" value="">
<input type="text" name="name[]" value="">

これにold関数を適用したい場合。

<input type="text" name="name[]" value="{{ old('name.0') }}">
<input type="text" name="name[]" value="{{ old('name.1') }}">
<input type="text" name="name[]" value="{{ old('name.2') }}">

「.」でインデックスを指定します。[]ではあかん。
あと、oldで配列のインデックスを動的に取りたい場合、

@foreach ($names as $key => $name)
	<input type="text" name="name[{{ $key }}]" value="{{ old("name.$key", $name) }}">
@endforeach

old内をダブルクォーテーションにして「.」で結ぶことで変数にも対応できる。

ちなみに上記は直前の入力値がなかったら、oldの第二変数がvalueに入るような形。
ここまで書いたら忘れないだろう。