2012-10-13 11 views
5

Próbuję dodać selectbox do jednego z moich formularzy (które tylko z elementami input = "text" działają całkiem nieźle), ale wszystkie ja get jest po prostu pustym selectboxem bez żadnych tagów. Więc jest to kod używam:Zend Framework 2: Próba dodania selectbox do formularza nie renderuje wartości

Bla.php :: Bla-> getInputFilter()

$inputFilter->add($factory->createInput(array(
    'type' => 'Zend\InputFilter\Select', 
    'name' => 'payment_type', 
    'required' => true, 
    'filters' => array(
     array('name' => 'Int'), 
    ), 
))); 

BlaForm.php :: BlaForm -> __ konstrukt():

$this->add(array(
    'type' => 'Zend\Form\Element\Select', 
    'name' => 'payment_type', 
    'options' => array(
     'label' => 'Payment', 
     'value_options' => array(
      0 => 'Nur Überweisung', 
      1 => 'Nur Paypal', 
      2 => 'Nur Barzahlung im Voraus', 
     ), 
    ), 
    'attributes' => array(
     'value' => 0 //set selected to "Nur Überweisung" 
    ) 
)); 

bla .php (Zobacz)

<div class="control-group"> 
    <?php 
     echo $this->formLabel($form->get('payment_type')->setLabelAttributes(array(
       'class' => 'control-label'  
      ))); 
    ?> 
    <div class="controls"> 
     <?=$this->formElement($form->get('payment_type'));?> 
     <span class="help-inline"><?=$this->formElementErrors($form->get('payment_type'));?></span> 
    </div> 
</div> 

próbowałem już za pomocą „opcje” zamiast „value_options” a wczoraj dowiedziałem się, że to tylko aliasem „value_options ". Również próbowałem formSelect() zamiast formElement() w moim widoku, ale to również niczego nie zmienia. Nawet usunąłem umlauty ze strun do celów testowych ...

Czy ktoś doświadczył tego samego problemu lub ma jakiś pomysł, co obecnie robię źle?

Odpowiedz

5

Właśnie wypróbowałem twoje przykłady lokalnie przeciwko bieżącemu wzorcowi (rev 9747bd01d) i pracowały bez problemu - używając albo formCollection() na formularzu, albo formElement() lub formSelect() na pojedynczym elemencie. W każdym przypadku otrzymuję następujący znacznik:

<select name="payment_type"><option value="0" selected="selected">Nur Überweisung</option> 
<option value="1">Nur Paypal</option> 
<option value="2">Nur Barzahlung im Voraus</option></select> 

Z jakiej wersji ZF2 korzystasz? Czy możesz przetestować przeciwko wersji 2.0.2 lub aktualnemu wzorowi?

+1

Z 2.0.2 mój kod z góry działa jak urok. Dziękuję za spojrzenie i uświadomienie mi tego. – pebbo

0

Sam znalazłem rozwiązanie. W BlaForm.php format elementu selectbox musi być następująca:

$this->add(array(
    'type' => 'Zend\Form\Element\Select', 
    'name' => 'payment_type', 
    'options' => array(
     'label' => 'Bezahlung', 
    ), 
    'attributes' => array(
     'options' => array(
      0 => 'Nurerweisung', 
      1 => 'NurPaypal', 
      2 => 'NurBarzahlung im Voraus', 
      3 => 'NurBarzahlung am Bus', 
     ), 
     'value' => 2 //set selected to "public" 
    ) 
)); 

„Opcje” i „wartość” muszą być zagnieżdżone unter „atrybutów” ... no tak, dlaczego nie? Dowiedziałem się, patrząc głębiej inter Zend \ Form \ Element \ Select, gdzie istnieje metoda "getOptionAttributeValues ​​()", co dało mi podpowiedź.

+0

Co więcej dowiedziałem się, że to musi być "opcje", a nie "value_options". – pebbo

+2

Kod przy użyciu "value_options" jest poprawny. Wziąłem przykład podany w pytaniu i działa on poprawnie w stosunku do obecnego wzorca (rev 9747bd01d). Opcje powinny ** nie ** być określone w atrybutach. – weierophinney

+0

OK, zaktualizowałem moją aplikację do wersji 2.0.2 i wszystko działa wspaniale z kodem w moim pytaniu. Dziękuję za wyjaśnienie faktu "value_options". – pebbo