我正在尝试使用数据库中的值填充下拉选择表单。
这是我目前所拥有的。
$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.选项的值不是id,而标题来自表格中的“标题”字段
谢谢,
三通
答案 0 :(得分:14)
请参阅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
));
答案 1 :(得分:1)
您希望循环浏览模式并为每种模式创建一个选项,如下所示:
$options = array();
foreach($modes as $mode)
{
$options[$mode] = "Title " . $mode;
}
echo $form->select('current_mode', $options);
您可以将上述逻辑放在视图中,也可以在控制器中执行,然后像这样设置变量:
$this->set("options", $options);
这里的文档很好地解释了select元素方法: