【问题标题】:How to set the default option in SELECT input field如何在 SELECT 输入字段中设置默认选项
【发布时间】:2012-02-26 17:26:27
【问题描述】:

我正在尝试为 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',

有什么帮助吗?提前致以问候和感谢

【问题讨论】:

  • $record['Record']['status']; 是什么?
  • 只是检查该变量中存储了哪个值。例如,我得到“拒绝”而不是数值 (1,2,3,4),因为这可能不起作用,因为我不知道如何解决它。
  • 是的,不过他大概想知道现在的状态是?确切的输出是什么?如果是 0 那么你就知道问题出在哪里了
  • 不,是 2 我的意思是 array_search($record['Record']['status'], $enum_options) 返回 "2" 所以这不是问题
  • FWIW,在 Firefox 中按刷新将不允许您测试默认值是否有效。您需要将光标放在网址栏中并按回车键(或查看源代码)。

标签: php cakephp frameworks cakephp-2.0


【解决方案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'));
}

【讨论】:

    【解决方案2】:

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

    在你的情况下

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

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

    【讨论】:

    • 我已经尝试过该解决方案,但对我不起作用,即使我需要更改我的数据库结构,还有其他建议吗?我被困在这里:(
    • 你的意思是它不起作用?它可以在 10 多个应用程序中完美运行 :) 并且易于设置。
    【解决方案3】:

    使用“空”。这将完美无缺。

    $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']));
    

    【讨论】:

    • 这也有效,但重复元素两次意味着如果我有“拒绝”然后“拒绝”显示为选中但再次出现在下面;)
    【解决方案4】:

    简单的 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));
    

    【讨论】:

      【解决方案5】:

      请务必检查您的表单名称。它将确定应该命名的记录以使其成为默认值。要将状态默认设置为您从数据库中提取的记录,您可以执行以下操作:

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

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

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

      注意记录和 Form->create MODELNAME 是如何匹配的。这是自动选择默认值的必要条件。然后你需要做的就是将#设置为你想要设置为默认值的选项的数值。

      【讨论】:

        猜你喜欢
        • 2018-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-11
        • 1970-01-01
        • 2017-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多