Foros del Web » Programando para Internet » PHP » Zend »

Form y pasar MultiOptions a un Select

Estas en el tema de Form y pasar MultiOptions a un Select en el foro de Zend en Foros del Web. Pues como dice el título, estoy intentando pasar los datos de la DB a un Select de Zend_Form. El tema es el siguiente, desde el ...
  #1 (permalink)  
Antiguo 13/10/2011, 11:49
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Form y pasar MultiOptions a un Select

Pues como dice el título, estoy intentando pasar los datos de la DB a un Select de Zend_Form.

El tema es el siguiente, desde el controller paso los datos al form, estos se visualizan correctamente, pero al enviarlos, no pasan el isValid si no tiene valores definidos el array del Select.

Pongo el caso real. Hay algo que no estoy haciendo bien.

El select del form:
Código PHP:
//select
$this->addElement(
        
'select''delegation', array(
        
'label' => 'Delegation',
        
'multioptions' => array(),
        
'required' => false,
    )
); 
La función que trae el array del controller:
Código PHP:
public function setDefaultsFromEntity($user$select)
{
    
//setear el select
    
$select $this->getElement('delegation');
    
$select->clearMultiOptions();
    
$select->addMultiOptions($select);

    
//default values for select
    
$values = array(
        
'delegation'    => $user[0]['delId'],
    );
    
$this->setDefaults($values);


Pues bien, imaginemos que el array para setear el select trae 5 valores.
0 => 'uno'
1 => 'dos'
2 => 'tres'
3 => 'cuatro'
4 => 'cinco'

Con el select tal cual está, no pasa el isValid. sale el error traducido "No se ha encontrado '1' en el argumento especificado" a pesar de que se ven todos los valores seteados.

Pero si añado por ejemplo dos valores directamente al MultiOptions del select
Código PHP:
//select
$this->addElement(
        
'select''delegation', array(
        
'label' => 'Delegation',
        
'multioptions' => array(
            
=> 'unValor',
            
=> 'otroValor',
        ),
        
'required' => false,
    )
); 
Pasa el isValid si coincide con la posición que tiene el array del select.
En este caso solo pasarían los que tienen indice 0 y 1. El resto saldría el error.

He probado con clearMultiOptions, addMultiOptions, setMultiOptions, mezclando, quitando, poniendo y con todo me sale lo mismo.

Alguna pista de que puede ser.

Gracias de antemano y saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #2 (permalink)  
Antiguo 13/10/2011, 12:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Form y pasar MultiOptions a un Select

¿Seguro haz probado con setMultiOptions? Todo eso lo debes de hacer antes del isValid de Zend_Form.
  #3 (permalink)  
Antiguo 13/10/2011, 12:33
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Form y pasar MultiOptions a un Select

Cita:
Iniciado por GatorV Ver Mensaje
¿Seguro haz probado con setMultiOptions? Todo eso lo debes de hacer antes del isValid de Zend_Form.
Hola GatorV, el tema es ese, he probado también con setMultiOptions(), y sale igual.

El controller, carga el form si no recibe datos por POST, el action del form carga de nuevo el controller y si recibe datos por POST pasa los datos a isValid.

Código PHP:
public function editAction()
{
        
//form
        
$form = new Application_Form_UserEdit();
 
        if( 
$this->getRequest()->isPost() 
                    && 
$form->isValid($this->getRequest()->getPost()) )
        {
            
// procesa los datos
            // redirector
        
}

        
$form->setDefaultsFromEntity($repository$select);
        
$this->view->formEdit $form;

Llevo toda la mañana probando cosas y nada, todo se ve perfecto, pero falla ese detalle del isValid.

Gracias por pasar.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #4 (permalink)  
Antiguo 13/10/2011, 12:34
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Form y pasar MultiOptions a un Select

Y que hay supuestamente en $select ? porque sea lo que sea que estas pasando lo estas "pisando" , no se queja porque estas pasando por parámetro un Zend_Form_Element en vez de un array ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 13/10/2011, 12:43
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Form y pasar MultiOptions a un Select

Cita:
Iniciado por masterpuppet Ver Mensaje
Y que hay supuestamente en $select ? porque sea lo que sea que estas pasando lo estas "pisando" , no se queja porque estas pasando por parámetro un Zend_Form_Element en vez de un array ?
He respondido y no he visto esta respuesta.

Hola masterpuppet,

Pues $select trae un array tal cual pide las instrucciones de Zend.
Cita:
addMultiOption($option, $value)
addMultiOptions(array $options)
setMultiOptions(array $options) (overwrites existing options)
...
El var_dump en el form me muestra el array así:
Código PHP:
array
  
=> string 'SIVER' (length=7)
  
=> string 'ENTERPRI' (length=8)
  
=> string 'XALOFINA' (length=8)
  
=> string 'EXFEZERA' (length=8)
  
10 => string 'RODUDIRISU' (length=10)
  
11 => string 'SARERERU' (length=8)
  
12 => string 'SEARAZESE' (length=9)
  
13 => string 'DAZAAXUE' (length=8)
  
14 => string 'DACACARO' (length=8)
  
15 => string 'SACASARE' (length=8)
... 
Y revisando el html generado muestra los valores correctamente en los options...

Incluso el selected que trae de la DB se activa correctamente. Ya no se me ocurre que más cambiar, tampoco hay muchas opciones que cambiar, pero se resiste jeje.

Gracias por pasar.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #6 (permalink)  
Antiguo 13/10/2011, 12:54
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Form y pasar MultiOptions a un Select

A ver, primero, esto no entiendo como te funciona:

Código PHP:
Ver original
  1. public function setDefaultsFromEntity($user, $select)
  2. {
  3.     $select = $this->getElement('delegation');
  4.     $select->clearMultiOptions();
  5.     $select->addMultiOptions($select);
  6.     ...
  7. }

si lo tienes tal cual estas pisando $select no debería cargarte el select, y segundo ten en cuenta el orden, deberias agregar primero los elementos y luego validar, en el orden actual estas validando antes de agregarlos. por consiguiente el valor no esta en el array y dispara el validator ;)

Código PHP:
Ver original
  1. public function editAction()
  2. {    
  3.     $form = new Application_Form_UserEdit();
  4.     $form->setDefaultsFromEntity($repository, $select);
  5.     if( $this->getRequest()->isPost()  
  6.                 && $form->isValid($this->getRequest()->getPost()) ) {
  7.         // procesa los datos
  8.         // redirector
  9.     }
  10.     $this->view->formEdit = $form;
  11. }

Te sugiero que extiendas Zend_Form_Multi o Zend_Form_Element_Select para que soporte queries de doctrine, luego con crear el elemento y pasarle la query seria suficiente sin necesidad de agregar los datos en el controller.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 13/10/2011, 13:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Form y pasar MultiOptions a un Select

Cita:
Iniciado por masterpuppet Ver Mensaje
a ver, primero, esto no entiendo como te funciona:

Código php:
Ver original
  1. public function setdefaultsfromentity($user, $select)
  2. {
  3.     $select = $this->getelement('delegation');
  4.     $select->clearmultioptions();
  5.     $select->addmultioptions($select);
  6.     ...
  7. }

si lo tienes tal cual estas pisando $select no debería cargarte el select, y segundo ten en cuenta el orden, deberias agregar primero los elementos y luego validar, en el orden actual estas validando antes de agregarlos. Por consiguiente el valor no esta en el array y dispara el validator ;)

Código php:
Ver original
  1. public function editaction()
  2. {    
  3.     $form = new application_form_useredit();
  4.     $form->setdefaultsfromentity($repository, $select);
  5.     if( $this->getrequest()->ispost()  
  6.                 && $form->isvalid($this->getrequest()->getpost()) ) {
  7.         // procesa los datos
  8.         // redirector
  9.     }
  10.     $this->view->formedit = $form;
  11. }

te sugiero que extiendas zend_form_multi o zend_form_element_select para que soporte queries de doctrine, luego con crear el elemento y pasarle la query seria suficiente sin necesidad de agregar los datos en el controller.

Saludos.
+1000
  #8 (permalink)  
Antiguo 13/10/2011, 13:23
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Form y pasar MultiOptions a un Select

Cita:
Iniciado por masterpuppet Ver Mensaje
... y segundo ten en cuenta el orden, deberias agregar primero los elementos y luego validar, en el orden actual estas validando antes de agregarlos. por consiguiente el valor no esta en el array y dispara el validator ;)
Pues ahí estaba el error, el controller la verdad es un poco extenso, y lo tenía casi al final.

No se por que pensaba que se enviaba todo, y el isValid tomaba los datos POST y hacía las comprobaciones. Pero claro, isValid carga desde el objeto $form->...

Si no fuera por vosotros me podría pegar aquí unas semanas hasta dar con lo que es.

Cita:
Iniciado por masterpuppet Ver Mensaje
...Te sugiero que extiendas Zend_Form_Multi o Zend_Form_Element_Select para que soporte queries de doctrine, luego con crear el elemento y pasarle la query seria suficiente sin necesidad de agregar los datos en el controller....
Lo investigaré a ver como va eso.

Gracias por todo, no os hacéis una idea de la cantidad de detalles que estoy aprendiendo con las respuestas que dais. En serio, muchas gracias.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Etiquetas: select, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:17.