CakePHPで入力フォームを作るとき、
たとえば都道府県を入れさせるときに普通ならリストボックス作りたいわけで、
で、HTMLファイルにごりごりと
<option value="01">北海道</option>
<option value="02">青森県</option>
<option value="03">岩手県</option>
とか47都道府県書きたくないし、
そもそもDB上じゃ都道府県はマスタ作って
コードで管理してるんだわって時に、
いつもならフレームワーク使わずに
PHPで都道府県マスタテーブルお呼び出しして作ってたんですよ。
CakePHPならどうするんだろうなと思って調べたんだけど
調べ方が悪いのか全然ヒットしなかったのでメモ。
用意するもの
MySQL
- 都道府県テーブル(Prefs)
CakePHP
- ArticlesTable.php
- ArticlesController.php
- index.ctp
書き方
1.ArticlesTable.phpのpublic function initialize()に
都道府県テーブルを関連付け(belongsTo)してやる。
CakePHP
public function initialize(array $config)
{
$this->belongsTo('Prefs', [
'className' => 'Lists.Prefs',
'foreignKey' => 'pref_id'
]);
}
2.ArticlesController.phpで都道府県テーブルを取り出す変数をセット。
CakePHP
public function index() {
$prefs=$this->Articles->Prefs->find();
$this->set('prefs',$prefs);
}
3.index.ctpにセレクトボックス生成用のフォームヘルパーを取り付け。
CakePHP
echo $this->Form->create($article);
echo $this->Form->label('都道府県','都道府県');
$selectprefs = array();
foreach ($prefs as $pref){
$selectprefs +=array($pref->pref_id => $pref->pref_name);
}
echo $this->Form->select('都道府県',$selectprefs);
echo $this->Form->end();
CakePHPは触り始めたばっかりなんで
まだ生のPHP触ってる方が楽だなーなどと思うこともたびたびありますが
たぶん慣れればこっちの方が楽なんだろうな。
できないことも多々ありそうだけど。