2012-10-13 4 views
5

Ich versuche, eine Auswahlbox zu einem meiner Formulare hinzuzufügen (was nur mit Input Type = "Text" -Elementen funktioniert ziemlich gut), aber alles ich get ist nur eine leere Auswahlbox mit keinen Tags darin. Das ist also der Code, den ich verwenden:Zend Framework 2: Der Versuch, eine Auswahlbox zu einem Formular hinzuzufügen, rendert keine Werte

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 -> __ construct():

$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 (Ansicht)

<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> 

ich habe bereits versucht mit „Optionen“ anstelle von „value_options“ und gestern habe ich gelernt, dass es nur ein Alias ​​von „value_options ist ". Auch ich habe formSelect() anstelle von formElement() in meiner Ansicht versucht, aber das ändert auch nichts. Ich habe sogar die Umlaute von den Strings für Testzwecke entfernt ...

Hat jemand das gleiche Problem oder hat eine Idee, was ich gerade falsch mache?

Antwort

5

Ich habe gerade Ihre Beispiele lokal gegen aktuelle Master (rev 9747bd01d), und sie funktionierten ohne Problem - mit entweder formCollection() auf dem Formular oder formElement() oder formSelect() auf dem einzelnen Element. In jedem Fall bekomme ich die folgende Markup:

<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> 

Welche Version von ZF2 verwenden Sie? Können Sie bitte gegen 2.0.2 oder aktuellen Master testen?

+1

Mit 2.0.2 funktioniert mein Code von oben wie ein Zauber. Danke, dass du einen Blick darauf geworfen hast und mich darauf aufmerksam gemacht hast. – pebbo

0

Ich fand die Lösung selbst. In BlaForm.php das Format des selectbox Element sein muss wie folgt:

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

„Optionen“ und „Wert“ müssen unter zu verschachtelt „Attribute“ ... na ja ja, warum nicht? Ich habe herausgefunden, indem ich tiefer zwischen Zend \ Form \ Element \ Select suche, wo eine Methode "getOptionAttributeValues ​​()" existiert, die mir den Hinweis gab.

+0

Weiter fand ich heraus, dass HAS "Optionen" und nicht "Wert_Optionen" sein muss. – pebbo

+2

Der Code mit "value_options" ist korrekt. Ich nahm das Beispiel, das in der Frage zur Verfügung gestellt wurde, und es funktioniert korrekt gegen den aktuellen Master (rev 9747bd01d). Optionen sollten in den Attributen nicht mehr ** angegeben werden. – weierophinney

+0

OK, ich habe meine App auf 2.0.2 aktualisiert und alles funktioniert super mit dem Code in meiner Frage. Danke, dass du die "value_options" Tatsache klarstellst. – pebbo