2010-08-13 29 views
9

Hola Lo he estado buscando en las últimas horas y he leído todos los resultados que google me puede dar, pero aún no puedo hacerlo funcionar.Cómo llenar el elemento de selección de formulario zend?

Estoy creando un elemento select de forma Zend través de:

this->addElement('select','my_select', array( 
    'label' => 'Currency', 'value' => 'blue', 
    'multiOptions' => array('red' => 'Rouge', 'blue' => 'Bleu', 'white' => 'Blanc',),)); 

ahora quiero llenarla a través

$form->populate 

desde el controlador, he intentado dar matriz de doble dimensiones como

$vals = array("my_select" => array("US Dollar", "Pound Sterling")) 

y luego dándolo en:

$form->populate($vals); 

pero esto aún no ha funcionado y no estoy seguro de si esto va a funcionar, en este momento estoy construyendo mi matriz como en array('red' => 'Rouge', 'blue' => 'Bleu', 'white' => 'Blanc') la misma clase que forma Zend y luego passsing al addElement multiOptions dinámicamente, ya que este tipo sugiere aquí: http://zendguru.wordpress.com/2009/03/06/zend-framework-form-working-with-dropdownselect-list/ que funciona, pero me gustaría tenerlo a través de llenar y también si alguien me puede sugerir cómo seleccionar el valor predeterminado también, ¡le estaré muy agradecido!

Gracias,

+0

http://stackoverflow.com/questions/15551188/zf2-form-populate-select-field-with-data-coming-from-database/18078818#18078818 –

Respuesta

10

El método poblar le permite "rellenar" la forma con valores por defecto de IE:

$form->populate(array("my_select" => "red"); 

que fijaría el my_select tener "rojo", como ser seleccionado.

EDITAR

En cuanto a la matriz multidimensional, no estoy exactamente seguro de lo que está tratando de hacer, es lo que quieres otra instrucción de selección o para anexar esos artículos? Parece que debería ser otro elemento selecto.

En cuanto a eso, lo que desea es establecer esa selección con los valores del método populate, esto no es una opción. Sin embargo, puede hacer algo como esto:

$currency = new Zend_Form_Element_Select('currency', array(
     "label" => "Currency", 
     "required" => true, 
    )); 
$currency->addMultiOptions(array(
     "US Dollar" => 1, 
     "Pound Sterling" => 2, 
    )); 

$form->addElements(array($currency)); 

$form->populate(array("currency" => "US Dollar")); 

Y eso agregará su declaración de selección de moneda. Y eso debería configurar el menú desplegable (la matriz de valores podría provenir de la base de datos, etc.) y luego configurar el dólar estadounidense para que sea el predeterminado con el método populate.

3

Para aquellos como yo que están a punto de perder horas de su precioso tiempo, ¡TEN CUIDADO! Si agregó un filtro a su elemento de selección, debe estar 100% seguro de que los datos pasados ​​a poblar() contienen valores filtrados de. Si no lo hace, ¡su cuadro desplegable no recibirá ninguna opción seleccionada! En mi caso, tuve un elemento select con estas opciones:

'' => 'Choisir un pays', 
'France' => 'France', 
'Madagascar' => 'Madagascar', 
'Maroc' => 'Maroc' 

Pero también pasé el filtro StringToLower al elemento ... Si los datos POST contenían el valor "Madagascar", fue aprobada "Madagascar" en la función populate() y no se seleccionó nada ... ¡Pero debido a este filtro StringToLower, debería haber pasado "madagascar"!

historia corta corta: tenga cuidado con los filtros en su elemento de selección: poblar() podría ser perturbado.

edición adicional: Una casilla de verificación con Int filtro y value="0" se comprobará si hay datos o cualquier datos de cadena no numéricos se pasa a populate() para este cuadro ... Como se trata de una casilla de verificación, lo recomiendo para evitar el filtro Int, y use el validador InArray en su lugar.

Cuestiones relacionadas