Zend Framework 2 未选中的复选框 setValue 不起作用

Zend Framework 2 Checkbox setValue for unchecked not work

我试过将复选框值设置为 false:

$form->add(array(
        'type' => 'Zend\Form\Element\Checkbox',
        'name' => 'test_checkbox',
        'options' => array(
            'label' => 'Test checkbox',
            'use_hidden_element' => false,
            'checked_value' => 1,
            'unchecked_value' => 0,
        ),
        'attributes' => array(
            'value' => 0,
        ),
    ));

但由于本页包含:

<input type="checkbox" name="test_checkbox" value="1">

值没有改变,我不明白为什么。

其他PHP和JS脚本不会改变这个值。

也许我误解了 "checked_value"、"unchecked_value" 和 "value" 的工作原理?

您的代码几乎是正确的。应该是:

$form->add(array(
    'type' => 'Zend\Form\Element\Checkbox',
    'name' => 'test_checkbox',
    'options' => array(
        'label' => 'Test checkbox',
        'use_hidden_element' => false,
        'checked_value' => 1,
        'unchecked_value' => 0,
    )
));

但我认为您误解了 HTML 复选框的工作原理。 value 属性应该 always 包含 only 检查的值。如果复选框被勾选,浏览器只会提交这个值。因此,当页面加载时,复选框将在源代码中正确显示为:

<input type="checkbox" name="test_checkbox" value="1">

为了实现未选中的值,ZF(以及我知道的所有其他框架)将其添加到复选框上方 的隐藏表单字段中。如果未勾选复选框,浏览器将提交隐藏的表单域。