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

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で表示すればいいです。

これで実装ができます。