こんにちは。今回は、Larvelでold()関数を使って、select、optionタグの値を保持する方法を紹介します。バージョンは、5.8です。
old()関数は、直前のデータを取得する便利なメソッドです。
公式ドキュメント↓
https://readouble.com/laravel/5.8/ja/requests.html
<input type="text" name="username" value="{{ old('username') }}">
old('POSTされた名前')で使うことができます。
#old()を使って、select、optionタグの値を保持したい!
<select name="category_id">
<option value="">選択されていません</option>
<option type="text" value="1" @if(1 === (int)old('category_id')) selected @endif >PHP</option>
<option type="text" value="2" @if(2 === (int)old('category_id')) selected @endif >Ryby</option>
</select>
optionタグの中の
@if(値 === (int)old('category_id') selected @endif
が保持してた値だけをselectedにすることで、保持した値を反映することができます。
なぜ、ここでold()関数の前に(int)
をつけているかというと、old()関数が返す値は、自動的にString型
になっているからです。もし、(int)
をつけたくないのであれば、===
を==
にして、型を指定しない方法にすればいいです。
#DBに登録していたデータを表示させたい
先ほど紹介した内容のold()関数の第二引数に値を入れてあげると、デフォルトで指定した値にしてくれます。
こうすることで、初期画面は、DBから取得したデータがセレクトされ、変更した時、第一引数で指定した値にしてくれます。
@if(値 === (int)old('category_id', $old_category)) selected @endif
Laravelって便利ですよねー。
今回、紹介したold()関数は、String型で返してくるので、old()関数を使ったのに、選択されてないじゃないかという人もいたのではないでしょうか。僕も、その一人でしたが、原因調査をうまくできるようになっていきましょう