LaravelのFormファサード(laravelcollective/html)でセレクトボックスを実装する方法を解説する。
公式サイト
インストール
$ composer require laravelcollective/html
バージョンを指定してインストールすることもできる。
例:5.8をインストールする場合
$ composer require "laravelcollective/html":"5.8"
Form::select()の使い方
第1引数がselectタグのname属性、第2引数がoptionタグになる。
ソースコード
{{ Form::select(
'pref',
[13=>'東京都',14=>'神奈川県', 26=>'京都府',27=>'大阪府']
) }}
実行結果
<select name="pref">
<option value="13">東京都</option>
<option value="14">神奈川県</option>
<option value="26">京都府</option>
<option value="27">大阪府</option>
</select>
第3引数は初期値になる。
ソースコード
{{ Form::select(
'pref',
[13=>'東京都',14=>'神奈川県', 26=>'京都府',27=>'大阪府'],
26
) }}
実行結果
<select name="pref">
<option value="13">東京都</option>
<option value="14">神奈川県</option>
<option value="26" selected="selected">京都府</option>
<option value="27">大阪府</option>
</select>
第4引数はselectタグの属性になる。
ソースコード
{{ Form::select(
'pref',
[13=>'東京都',14=>'神奈川県', 26=>'京都府',27=>'大阪府'],
null,
['class'=>'form-control']
) }}
実行結果
<select class="form-control" name="pref">
<option value="13">東京都</option>
<option value="14">神奈川県</option>
<option value="26">京都府</option>
<option value="27">大阪府</option>
</select>
第4引数にplaceholderを指定すると、値のないoptionタグが要素の最初に作成される。
ソースコード
{{ Form::select(
'pref',
[13=>'東京都',14=>'神奈川県', 26=>'京都府',27=>'大阪府'],
null,
['class'=>'form-control', 'placeholder'=>'選択してください']
) }}
実行結果
<select class="form-control" name="pref">
<option selected="selected" value="">選択してください</option>
<option value="13">東京都</option>
<option value="14">神奈川県</option>
<option value="26">京都府</option>
<option value="27">大阪府</option>
</select>
第2引数を配列の入れ子にすると、選択肢が階層化される。
ソースコード
{{ Form::select('pref', [
'関東地方'=>[13=>'東京都',14=>'神奈川県'],
'近畿地方'=>[26=>'京都府',27=>'大阪府']
]) }}
実行結果
<select name="pref">
<optgroup label="関東地方">
<option value="13">東京都</option>
<option value="14">神奈川県</option>
</optgroup><optgroup label="近畿地方">
<option value="26">京都府</option>
<option value="27">大阪府</option>
</optgroup>
</select>
Eloquentモデルを使う
pluck()メソッドを使うと、簡単に選択肢を作成できる。
$prefectures = Prefectures::query()
->orderBy('code)
->pluck('name', 'code');
return view('index')->with(['prefectures'=>$prefectures]);
{{ Form::select('pref', $prefectures) }}