CakePHP - 填充选择表单

时间:2011-04-14 06:23:11

标签: cakephp

我正在尝试使用数据库中的值填充下拉选择表单。

这是我目前所拥有的。

$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,而标题来自表格中的“标题”字段

谢谢,
三通

2 个答案:

答案 0 :(得分:14)

请参阅http://book.cakephp.org/view/1022/find-listhttp://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元素方法:

http://book.cakephp.org/view/1430/select

相关问题