【Laravel】bladeのoldメソッドに配列のパラメータをセットする方法

laravelのbladeのフォームでPOSTしたあとにバリデーションなどで同じ画面に戻ってくるときに、oldメソッドを使って値を保持しますよね。

そのとき、POSTのパラメータを配列にしている場合、どのようにoldで値をinputタグのvalueにセットすればいいのでしょう?

答えはドットでつなぐだけです!

 

ドットで多重配列を指定する

単純にこのように指定するだけです。

連想配列のような配列のキーに名前をつけない場合は、キーが数値になります。

それをドットで繋げばOKです。

inputタグのvalueにこのようにセットしてください。

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

 

ドットで多重配列の連想配列を指定する

連想配列でパラメータをセットすることも多いですよね。

その場合は配列のキー名をドットで繋げばOKです。

<input type="text" name="user[email]" value="{{ old('user.email') }}" />

laravelの公式リファレンスはこちら

 

意外に日本語の公式リファレンスになくて困るんですよね。

foreachでoldの値をループさせたいとき

@foreach (old('test') as $item)
  <input type="text" name="test[]" value="{{ old("test.$item") }}" />
@endforeach

こうできたらめちゃくちゃいいですよね。

でもこれは動きません! エラーになるはずです。

old(‘test’)としても配列が取得できるわけではないようです。

もし、配列の数が決まっているなら@foreachではなく@forを使うとできます。

@for ($i=0; $i<3; $i++;)
  <input type="text" name="test[]" value="{{ old("test.$i") }}" />
@endforeach

ひと工夫が必要になります。

今回は以上です!

Laravel上達の近道