CakePHP FormHelper单选按钮(或复选框)仅提交最后一个按钮的值

时间:2014-03-19 06:33:47

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

背景

使用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创建所有单选按钮(或复选框)以正确提交值?

2 个答案:

答案 0 :(得分:3)

  

对于某些输入类型(复选框,无线电),会创建隐藏输入,以便即使没有指定值,$this->request->data中的键也会存在。

     

如果要在窗体上创建多个输入块,这些输入块全部组合在一起,则应在除第一个输入之外的所有输入上使用此参数。如果隐藏输入位于多个位置的页面上,则仅保存最后一组输入值。 (Documentation

因此,对于您的任务,将'hiddenField' => false,作为一个选项传递给input()的所有来电 组的单选按钮(或复选框)除了第一个。在此示例中,我们使用名称&#39;字段&#39;。

e.g。

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
));

答案 1 :(得分:-1)

尝试以下方法:

<?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'))
                        )); ?>

希望这有效。