1

背景

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

4

2 回答 2

3

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

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

因此,对于您的任务,'hiddenField' => 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
));
于 2014-03-19T06:33:47.110 回答
-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'))
                        )); ?>

希望这有效。

于 2016-06-20T09:40:31.217 回答