【问题标题】:CakePHP FormHelper radio buttons (or checkboxes) only last button's value is being submittedCakePHP FormHelper 单选按钮(或复选框)仅提交最后一个按钮的值
【发布时间】:2016-06-20 20:27:40
【问题描述】:

背景

使用CakePHPFormHelper,我正在创建多个单选按钮,每个单选按钮都通过单独调用input() 呈现,以允许在单选按钮之间使用HTML。

问题

当表单被提交时,只有最后一个单选按钮的值被提交到服务器。

// preselect radio button if appropriate    
$selected = isset($this->request->data['ModelName']['field']) ? $this->request->data['ModelName']['field'] : null ;

// output the radio button
echo $this->Form->input('field', array(
    'type' => 'radio',
    'options' => array(1 => 'Option A',),
    'class' => 'testClass',
    'selected' => $selected,
    'before' => '<div class="testOuterClass">',
    'after' => '</div>',
));

要求

如何让所有使用 FormHelper 创建的单选按钮(或复选框)正确提交值?

【问题讨论】:

    标签: php checkbox radio-button cakephp-2.0 formhelper


    【解决方案1】:

    对于某些输入类型(复选框、单选),会创建一个隐藏输入,这样即使没有指定值,$this-&gt;request-&gt;data 中的键也会存在。

    如果您想在一个表单上创建多个输入块,这些块全部组合在一起,您应该在除第一个输入之外的所有输入上使用此参数。如果隐藏的输入在页面上的多个位置,则只会保存最后一组输入的值。 (Documentation)

    因此,对于您的任务,将'hiddenField' =&gt; false, 作为选项传递给所有对input()该组的单选按钮(或复选框)的调用除了第一个 .在此示例中,我们将其命名为“字段”。

    例如

    echo $this->Form->input('field', array(
        'type' => 'radio',
        'options' => array(1 => 'Option A',),
        'class' => 'testClass',
        'selected' => $selected,
        'before' => '<div class="testOuterClass">',
        'after' => '</div>',
        'hiddenField' => false, // added for non-first elements
    ));
    

    【讨论】:

      【解决方案2】:

      尝试以下方法:

      <?php echo $this->Form->input('fieldName', array(
                                  'type' => 'radio',
                                  'hiddenField' => false,
                                  'options' => array('value1' => 'option label1'))
                              )); ?>
      <?php echo $this->Form->input('fieldName', array(
                                  'type' => 'radio',
                                  'hiddenField' => false,
                                  'options' => array('value2' => 'option label2'))
                              )); ?>
      <?php echo $this->Form->input('fieldName', array(
                                  'type' => 'radio',
                                  'hiddenField' => false,
                                  'options' => array('value3' => 'option label3'))
                              )); ?>
      

      希望这行得通。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-12
        • 2015-10-14
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 2021-12-18
        • 2011-04-20
        • 2015-09-19
        相关资源
        最近更新 更多