2016-07-07 8 views
1

I Checkbox Wert in false gesetzt versucht:Zend Framework 2 Checkbox setValue für unkontrollierte nicht funktionieren

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

Aber als Ergebnis dieser Seite enthält:

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

Der Wert nicht und ich nicht ändert kann nicht verstehen warum.

Andere PHP- und JS-Skripte ändern diesen Wert nicht.

Vielleicht habe ich missverstanden, wie "checked_value", "unchecked_value" und "value" funktioniert?

+0

Warum setzen Sie 'checked_value' und das Attribut' value' auf verschiedene Dinge? Was versuchst du zu erreichen? –

+0

Wert-Attribut kann nur auf Wert zu einem Zeitpunkt halten. –

+0

@TimFountain, checked_value und unchecked_value ist Alias ​​für wahr und falsch (1 und 0). Wert - muss beim Laden der Seite ein Standardwert für das Kontrollkästchen sein. – felixmind

Antwort

2

Der Code, den Sie haben, ist fast korrekt. Es sollte sein:

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

Aber ich glaube, Sie missverstehen, wie HTML-Checkboxen arbeiten. Das Wertattribut sollte immernur den überprüften Wert enthalten. Browser übermitteln diesen Wert nur, wenn das Kontrollkästchen aktiviert ist. Also, wenn die Seite geladen wird, wird das Kontrollkästchen korrekt in der Quelle erscheinen als:

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

Um den ungeprüften Wert zu erreichen, ZF (und alle anderen Frameworks ich kenne) fügen Sie es zu einem versteckten Formularfeld oben der Kontrollkästchen. Wenn das Kontrollkästchen nicht aktiviert ist, sendet der Browser stattdessen das ausgeblendete Formularfeld.

+0

danke. Jetzt habe ich verstanden. – felixmind