2012-02-26 74 views
0

我试图设置SELECT元素的默认值,但它不工作。这是我的代码:如何设置SELECT输入字段中的默认选项

$enum_options = array('1'=>__('None'), '2'=>__('Call for Interview'),'3'=>__('Rejected'),'4'=>__('Pending for Upcoming Oportunities')); 
echo $record['Record']['status']; 
echo $this->Form->input('status', array('label' => __('Status'),'options'=> $enum_options, 'default' => $record['Record']['status'])); 

状态字段在DB是ENUM类型:

`status` enum('None','Call for Interview','Rejected','Pending for Upcoming Oportunities') NOT NULL DEFAULT 'None', 

任何帮助吗?问候并提前致谢

+0

什么是'$纪录[ '记录'] [ '状态'];'? – Mchl 2012-02-26 17:32:53

+0

只是为了检查哪个值存储在该var中。例如,我得到“拒绝”,而不是数值(1,2,3,4)也许这是行不通的,我不知道如何解决它。 – ReynierPM 2012-02-26 17:35:00

+0

是的,但他可能想知道目前的状态是?确切的输出是什么?如果它是0,那么你知道什么问题是 – mark 2012-02-26 18:29:03

回答

1
$enum_options = array('1'=>__('None'), '2'=>__('Call for Interview'),'3'=>__('Rejected'),'4'=>__('Pending for Upcoming Oportunities')); 
if($record['Record']['status'] == 'Call for Interview'){ 
echo $this->Form->input('status', array('label' => __('Status'),'options'=> $enum_options, 'selected' => '2')); 
}else if($record['Record']['status'] == 'Rejected'){ 
echo $this->Form->input('status', array('label' => __('Status'),'options'=> $enum_options, 'selected' => '3')); 
}else if($record['Record']['status'] == 'Pending for Upcoming Oportunities'){ 
echo $this->Form->input('status', array('label' => __('Status'),'options'=> $enum_options, 'selected' => '4')); 
} 
+0

也不工作,这里真的有什么不对劲:( – ReynierPM 2012-02-27 14:37:43

+0

替换选择,而不是默认值(查看上面的代码) – vicky 2012-02-27 14:42:40

+0

好吧,这工作正常,非常感谢 – ReynierPM 2012-02-27 14:51:36

1

我永远不会使用该视图来设置默认值。 这是逻辑的一部分,应该是控制器动作

所以里面你的情况

if (!$this->request->isPost()) { 
    $this->request->data['Record']['status'] = 2; 
} 

还要注意的是蛋糕本身并没有真正支持ENUM。你的方法有几个缺点和限制。 更合适和可扩展的解决方案是http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/

+0

我试过这个解决方案并且不适用于我,即使我需要更改我的数据库结构,任何其他建议吗?这里:( – ReynierPM 2012-02-27 03:58:00

+0

你是什么意思,它不工作?它可以完美地在超过10个应用程序:)并且很容易设置 – mark 2012-02-27 08:58:21

0

请务必检查您的表单的名称。它将确定记录应该被命名为什么以使其被默认。就是有身份的默认你是从数据库中提取的记录,你会做这样的事情:

<?php 
    echo $this->Form->create('MODELNAME'); 
    echo $this->Form->input('status', array('options'=> $enum_options)); 
?> 

然后在控制器,请确保您的记录是否设置正确:

$this->request->data['MODELNAME']['status'] = #; 

公告记录和Form-> create MODELNAME如何匹配。这是必须的,以便自动选择默认值。然后,您只需将#设置为您希望设置为默认选项的数字值。

1

使用“空”。这将工作完美。

$enum_options = array('1'=>'None', '2'=>'Call for Interview', '3'=>'Rejected', '4'=>'Pending for Upcoming Oportunities'); 

echo $this->Form->input('status', array('type'=>'select', 'label'=>'Status', 'options'=> $enum_options, 'empty'=>$record['Record']['status'])); 
+0

这也适用,但重复元素两次,即如果我有'拒绝',然后'拒绝'出现选择,但在下面再次出现;) – ReynierPM 2012-02-27 14:52:10

1

简单的2线技巧..当然,它会工作

$enum_options = array('1'=>__('None'), '2'=>__('Call for Interview'),'3'=>__('Rejected'),'4'=>__('Pending for Upcoming Oportunities')); 

echo $this->Form->input('status', array('label' => __('Status'),'options'=> $enum_options, 'selected' => !empty($record['Record']['status'])?$enum_options[$record['Record']['status']]:1)); 
相关问题