文系Webエンジニアの技術メモとたまに旅のメモ

未経験文系エンジニアとして働いてます。アウトプットとして簡単に技術メモを残していきます。たまに旅関係のも趣味で残していこうと思ってます。

【CakePHP3/定数】定数配列をControllerでsetし、templateでセレクトボックスの選択肢として使うやり方

今回は、CakePHP3系で定数配列を使って、templateのセレクトボックスの選択肢として表示する方法を記していきます。

1.やりたい事

const.phpで定義した定数配列をUsersController内でsetし、
template(add.ctp)のセレクトボックスの選択肢を定数配列で表示する。

2.事前準備

定数を使える設定にしてある事

まだ定数が使える設定をしてないという方はこちらの記事を参考にして見てください。

44igarashi.hatenablog.com

3.定数ファイルに定数配列の作成

今回は、定数配列を使用するので、定数ファイルに定義しましょう。
都道府県の定数配列を作成します。
※47都道府県定義するのは大変なのでひとまず2つでやっていきます。

const.php
<?php
return [
    // 都道府県
    define('HOKKAIDO', 1), // 北海道
    define('AOMORI',   2), // 青森

    define('PREFECTURES', [
        HOKKAIDO => '北海道',
        AOMORI   => '青森',
    ]),
];

4.ControllerでSetする

次に、作成した定数配列をControllerでsetし、templateで使えるようにしましょう。
今回は、ユーザーの新規作成画面の登録フォームで使うように設定します。

UsersController.php
<?php
public function add()
{
    〜 いろんな処理 〜   
    // 定数配列をセット
    $this->set('prefectures', PREFECTURES);
    $this->set('{templateで使う変数名}', {定数配列});
}

5.templateで変数の使用

先ほど、Controllerでsetした変数「prefectures」が使えるようになっているので、
そちらをセレクトボックスの選択肢として使っていきます。

add.ctp
<?php
echo $this->Form->control('prefecture_id', ['options' => $prefectures, 'empty' => '都道府県を選択してください。']);

6.表示確認

設定は全て完了したので、ブラウザで画面を見て確認して見ましょう。

f:id:igarashi44:20200711012520p:plain

想定通りの表示がされていますね!
これで、定数配列をセレクトボックスの選択肢として使うやり方は完了です!