仕事でFuelPHPを使うようになり、試行錯誤しながらも物を作っていっています。
入力で必要となるセレクトボックスですが、選択する値がDBから取得したものの場合があると思います。
今回は、そんな場合のDBおよびPHP、HTMLの記述をまとめてみます。
まずは今回作るものに必要なものを下記に記載していきます。
テスト用データベース
[SQL]
CREATE DATABSES `test` DEFAULT CHARACTER SET utf8;
[/SQL]
テスト用テーブル
[SQL]
CREATE TABLE `selects` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`value` varchar(128) DEFAULT NULL,
`delete` int(1) unsigned DEFAULT ‘0’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
[/SQL]
こちらのテスト用のデータベースとテーブルを作成し、テーブルの”id”と”value”をセレクトボックスとしてHTML上に表示します。
では、表示するためのデータも入れておきます。
[SQL]
INSERT INTO selects
(‘value’)
VALUES
(‘テスト1’),
(‘テスト2’),
(‘テスト3’),
(‘テスト4’),
(‘テスト5’);
[/SQL]
これで、データベース側の準備は完了です。
次にFuelPHP側の設定を行っていきます。
簡単に用意したいので、scaffoldを利用しちゃいます。
[php]
php oil r fromdb:scaffold –force selects
[/php]
scaffoldで、controllerとmodelとviewが作成されます。
作成されたmodelに1つ関数を作成します。
app/classes/model/select.php
[php]
from(‘selects’)->where(‘delete’, ‘<>‘, 1);
$query->order_by(‘id’, ‘asc’);
$selects = $query->execute()->as_array(‘id’, ‘value’);
foreach ($selects as $id => $value) {
$result[$id] = $value;
}
return $result;
}
}
[/php]
次はcontrollerを少しだけ書き換えます。
app/classes/controller/selects.php
[php]
template->set_global(‘selects’, $selects, false);
$this->template->content = View::forge(‘selects/index’);
}
}
[/php]
最後にviewファイルを書き換えます。
app/views/selects/index.php
[php]
[/php]
これで、http://[server]/selects/indexへアクセスするとセレクトボックスが画面に表示されるかと思われます。
細かい設定などは必要ですが、最低限の出力にはこれらの設定だけで可能です。
modelで関数を作るのがいいか・・・controller側で作るのがいいかは人それぞれかもしれませんが、自分的にはmodel側で用意したほうがcontrollerがゴチャゴチャしなくていいのではないかと思います。
コメント