2016-07-07 76 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