2012-10-13 123 views
5

Estoy tratando de agregar un cuadro de selección a uno de mis formularios (que simplemente con input type = "text" funciona bastante bien) pero todo lo que get es solo una casilla de selección vacía sin etiquetas. Así que este es el código que utilizo:Zend Framework 2: intentar agregar un cuadro de selección a un formulario no representa valores

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 (Ver)

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

ya he probado el uso de "opciones" en lugar de "value_options" y ayer me enteré de que es sólo un alias de "value_options ". También intenté formSelect() en lugar de formElement() en mi vista, pero eso tampoco cambia nada. Incluso quité las diéresis de las cuerdas con fines de prueba ...

¿Alguien ha tenido el mismo problema o tiene alguna idea de lo que estoy haciendo mal?

Respuesta

5

Acabo de probar sus ejemplos localmente contra el maestro actual (rev 9747bd01d), y funcionaron sin problemas, utilizando formCollection() en el formulario, o formElement() o formSelect() en el elemento individual. En cada caso, me sale el siguiente marcado:

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

¿Qué versión de ZF2 está usando? ¿Puedes probar contra 2.0.2 o el maestro actual, por favor?

+1

Con 2.0.2 mi código de arriba funciona como un amuleto. Gracias por echar un vistazo y hacerme consciente de eso. – pebbo

0

Encontré la solución yo mismo. En BlaForm.php el formato del elemento de caja de selección tiene que ser de la siguiente manera:

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

Las "opciones" y "valor" que ser anidado unter "atributos" ... bueno, sí, ¿por qué no? Descubrí buscando más profundamente entre Zend \ Form \ Element \ Select donde existe un método "getOptionAttributeValues ​​()", que me dio la pista.

+0

Más me enteré, eso es TIENE que ser "opciones" y no "opciones de valor". – pebbo

+2

El código que usa "opciones_de_valor" es correcto. Tomé el ejemplo proporcionado en la pregunta, y funciona correctamente contra el maestro actual (rev 9747bd01d). Las opciones ya no deberían especificar ** ** en los atributos. – weierophinney

+0

OK, he actualizado mi aplicación a 2.0.2 y todo funciona muy bien con el código en mi pregunta. Gracias por aclarar el hecho de "value_options". – pebbo

Cuestiones relacionadas