CakePHP3でテキスト入力とメニュー選択ができるフォームを作成する方法

42 回閲覧されました
みなさんこんにちは、jonioです。
今回はCakePHP3でテキスト入力とメニュー選択ができるフォームを作成する方法の解説をします。
CakePHPのバージョン
3.6で動作確認をしましたがHTMLに依存する方法なのでCakePHPのバージョンは何でも実装可能だと思います。
コントローラー
下記の記述をします。
$name_list = [];
$users = $this->User->find();
foreach ($users as $user) {
$name_list[] = $user->name;
}
$this->set(compact('name_list'));
配列のデータをテンプレートに送ります。
テンプレート
下記の記述をします。
<?= $this->Form->control("name", [
'type' => 'text',
'label' => '名前',
'list' => 'name-list',
'autocomplete' => 'off'
])?>
<datalist id="name-list">
<?php foreach($name_list as $name): ?>
<option value="<?= $name ?>"></option>
<?php endforeach ?>
</datalist>
5行目のautocompleteはoffにします。
これの設定をしないとフォームをクリックした時にメニューの選択ができなくなります。
4行目のname-listは7行目で使うので必ず設定します。
メニュー選択ができるのは7行目〜11行目です。
7行目のname-listは4行目の設定です。
8行目〜10行目でテーブルの情報をforeachで表示すればいいです。
これで実装ができます。