问题描述
|
我正在尝试使用数据库中的值填充下拉选择表单。
这是我目前所拥有的。
$modes = Set::combine($this->Setting->find(\'all\',array(\'conditions\' => array(\'setting_name LIKE\' => \'mode_%\'))),\'{n}.Setting.id\',\'{n}.Setting.setting_name\');
$this->set(\'modes\',$modes);
然后在视图中,这就是我所拥有的
echo $form->select(\'current_mode\',$modes);
该输出
<select name=\"data[Setting][current_mode]\" id=\"SettingCategoryId\">
<option value=\"\"></option>
<option value=\"2\">mode_2</option>
<option value=\"1\">mode_1</option>
<option value=\"3\">mode_3</option>
</select>
我现在拥有的输出几乎可以正常工作,但是如何使输出像这样?
<select name=\"data[Setting][current_mode]\" id=\"SettingCategoryId\">
<option value=\"mode_2\">Title 2</option>
<option value=\"mode_1\">Title 1</option>
<option value=\"mode_3\">Title 3</option>
</select>
注意:
1.没有默认选项,值为空
2. Option的值不是ID,标题来自表中的“标题”字段
谢谢,
三通
解决方法
参见http://book.cakephp.org/view/1022/find-list和http://book.cakephp.org/view/1062/displayField。
$settings = $this->Setting->find(\'list\',array(
\'conditions\' => array(\'Setting.setting_name LIKE\' => \'mode_%\'),\'fields\' => array(\'Setting.id\',\'Setting.title\')
));
$this->set(compact(\'settings\'));
// view
echo $this->Form->input(\'current_mode\',array(
\'type\' => \'select\',\'options\' => $settings,\'empty\' => false
));
,您要遍历模式并为每种模式创建一个选项,如下所示:
$options = array();
foreach($modes as $mode)
{
$options[$mode] = \"Title \" . $mode;
}
echo $form->select(\'current_mode\',$options);
您可以在视图中放入上述逻辑,也可以在控制器中进行操作,然后按如下所示设置变量:
$this->set(\"options\",$options);
此处的文档很好地解释了select元素方法:
http://book.cakephp.org/view/1430/select