2016-07-07 74 views
1

我试着在假设置复选框值:Zend框架2复选框的setValue为选中不行

$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”是如何工作的?

+0

为什么你将'checked_value'和'value'属性设置为不同的东西?你想达到什么目的? –

+0

值属性一次只能保存值。 –

+0

@TimFountain,checked_value和unchecked_value是true和false(1和0)的别名。值 - 在页面加载时必须是复选框的默认值。 – felixmind

回答

2

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

$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复选框的工作方式。值属性应始终为包含只有为选中的值。如果复选框被打勾,浏览器只会提交此值。因此,当页面加载时,该复选框将正确出现在源为:

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

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

+0

谢谢。现在我明白了。 – felixmind