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

Pasar parametros a formulario con ZEND (avanzado)

Estas en el tema de Pasar parametros a formulario con ZEND (avanzado) en el foro de Zend en Foros del Web. Muy buenas, soy nuevo en el foro y me encanta esta comunidad. Tengo el siguiente problema: Siguiendo la estructura de llamadas de paginas con zend ...
  #1 (permalink)  
Antiguo 10/08/2010, 04:11
 
Fecha de Ingreso: agosto-2010
Mensajes: 5
Antigüedad: 13 años, 8 meses
Puntos: 0
Pasar parametros a formulario con ZEND (avanzado)

Muy buenas, soy nuevo en el foro y me encanta esta comunidad.

Tengo el siguiente problema:



Siguiendo la estructura de llamadas de paginas con zend (Adjunto imagen con la estructuracion de carpetas), en controllers tengo la siguiente funcion:

Código PHP:
Ver original
  1. public function updateAction()
  2.     {
  3.        // $this->view->noticia = Application_Model_DbTable_Noticies::getNoticiaById($this->_getParam('id'));
  4.        
  5.  
  6.         $form = new Admin_Form_Noticia();    
  7.         $request = $this->getRequest();
  8.        
  9.        
  10.         if($request->isPost()){
  11.             $formData = $request->getPost();
  12.             if(!$form->isValid($formData)){
  13.                 $form->populate($formData);
  14.                 $this->view->form = $form;  
  15.                 return $this->render('update');
  16.             } else {
  17.                 Application_Model_DbTable_Noticies::updateNoticia($formData);
  18.                 $this->_redirect('/admin/noticies');
  19.             }
  20.         }
  21.        
  22.         $this->view->form = $form;
  23.        
  24.         $this->render('update');
  25.     }


Esto va al archivo update.phtml y tiene el siguiente codigo:

Código PHP:
Ver original
  1. <?php echo $this->form ?>

Despues este carga el formulario que se encuentra en Noticia.php con el siguiente codigo:

Código PHP:
Ver original
  1. <?php
  2.  
  3. class Admin_Form_Noticia extends Zend_Form
  4. {
  5.     public function  init()
  6.     {
  7.         $this->setMethod('post');
  8.  
  9.         $this->addElement('hidden', 'id',
  10.                 array('label' => 'Titol:',
  11.                      ));
  12.        
  13.        
  14.  
  15.         $this->addElement('text', 'data',
  16.                 array('label' => 'Data:'),
  17.                 array('validators' => array('alnum', array('regex', false, '/^[a-z]/i')),
  18.                 'required' => true, 'filters'  => array('StringToLower')));
  19.        
  20.         $this->addElement('text', 'titol',
  21.                 array('label' => 'Titol:',
  22.                       'required' => true));
  23.  
  24.  
  25.         $this->addElement('textarea', 'textcurt',
  26.                 array('label' => 'Text Curt:',
  27.                       'required' => true));
  28.  
  29.         $this->addElement('textarea', 'textllarg',
  30.                 array('label' => 'Text Llarg:',
  31.                       'required' => true,));
  32.  
  33.        
  34.  
  35.         $this->addElement('submit','desar',
  36.                 array('label' => 'Desar'));
  37.     }
  38.    
  39. }

En /models/dbtable/noticies.php, tengo una consulta a la base de datos que me retorna los mismos campos que tengo en el formulario.

Mi pregunta es como puedo decirle al campo de cada textbox del formulario que valga lo que tengo en la base de datos? Algo semejante como el value de html.

Muchas gracias!
  #2 (permalink)  
Antiguo 10/08/2010, 08:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Pasar parametros a formulario con ZEND (avanzado)

Ya mismo ahí lo tienes, tienes que usar $form->populate($data) para pasar los parámetros por defecto.

Por otro lado no es necesario que si tu forma es invalida vuelvas a inyectar los valores, Zend_Form lo hace por ti, y tu flujo quedaría mucho más limpio por ejemplo:
Código PHP:
Ver original
  1. public function updateAction()
  2. {
  3.            $form = new Admin_Form_Noticia();
  4.            $request = $this->getRequest();
  5.            $id = $this->_getParam('id');
  6.            
  7.            if ($request->isPost()) {
  8.                   if ($form->isValid($request->getPost())) {
  9.                            $data = $form->getValues();
  10.                            // Aqui procesas tu update y redireccionas
  11.                   }
  12.            }
  13.  
  14.            // Aqui extraes de tu bdd con el id
  15.            $form->populate($defaultData);
  16.            $this->view->form = $form;
  17. }

Saludos.
  #3 (permalink)  
Antiguo 10/08/2010, 11:38
 
Fecha de Ingreso: agosto-2010
Mensajes: 5
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Pasar parametros a formulario con ZEND (avanzado)

Cita:
Iniciado por GatorV Ver Mensaje
Ya mismo ahí lo tienes, tienes que usar $form->populate($data) para pasar los parámetros por defecto.

Por otro lado no es necesario que si tu forma es invalida vuelvas a inyectar los valores, Zend_Form lo hace por ti, y tu flujo quedaría mucho más limpio por ejemplo:
Código PHP:
Ver original
  1. public function updateAction()
  2. {
  3.            $form = new Admin_Form_Noticia();
  4.            $request = $this->getRequest();
  5.            $id = $this->_getParam('id');
  6.            
  7.            if ($request->isPost()) {
  8.                   if ($form->isValid($request->getPost())) {
  9.                            $data = $form->getValues();
  10.                            // Aqui procesas tu update y redireccionas
  11.                   }
  12.            }
  13.  
  14.            // Aqui extraes de tu bdd con el id
  15.            $form->populate($defaultData);
  16.            $this->view->form = $form;
  17. }

Saludos.
Muchisimas gracias crack! Mañana en el trabajo lo pruebo y te cuento
  #4 (permalink)  
Antiguo 12/08/2010, 02:40
 
Fecha de Ingreso: agosto-2010
Mensajes: 5
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Pasar parametros a formulario con ZEND (avanzado)

Bien el problema sigue, no me lee los datos del formulario:

Código PHP:
Ver original
  1. #
  2. // Aqui extraes de tu bdd con el id
  3. $form->populate($defaultData);
  4. $this->view->form = $form;

Yo tengo puesto esto:

Código PHP:
Ver original
  1. $noticies = new Application_Model_DbTable_Noticies();  
  2.  $form->populate($noticies->getNoticiaById($id));
  3. $this->view->form = $form;

Para extraer los datos de la BD esto:

Código PHP:
Ver original
  1. $noticies = array();
  2.             $id = (int)$id;
  3.             $row = $noticiesTable->fetchRow('id = ' . $id);            
  4.             if (!$row){
  5.                  throw new Exception("No se encuentra la fila $id");
  6.             }
  7.             else
  8.             {              
  9.                 $noticia = new Application_Model_Noticia;
  10.                 $noticia->setId($row->id);
  11.                 $noticia->setData($row->data);              
  12.                 $noticia->setTitol($row->titol);
  13.                 $noticia->setTextcurt($row->textcurt);
  14.                 $noticia->setTextLlarg($row->textllarg);
  15.                 $noticies[] = $noticia;    
  16.             }          
  17.             return $noticies;


Los paramentros de noticia los tengo que pasar asi por fuerza, entonces la complicacion esta aqui:

Código PHP:
Ver original
  1. #
  2. // Aqui extraes de tu bdd con el id
  3. $form->populate($defaultData);
  4. $this->view->form = $form;

Necesito saber como pasarle los mismos nombres que hay en los elementos del formulario

Creo que con el Zend_Dojo_Data se puede poner identificadores a los parametros extraidos pero no se como funciona, si me pudierais hechar una manos os lo agradeceria mucho! Gracias.
  #5 (permalink)  
Antiguo 12/08/2010, 08:13
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Pasar parametros a formulario con ZEND (avanzado)

Bueno tu problema aqui es que a populate le estas enviando un array de objetos Noticias. Lo que tu necesitas es enviarle un array de los valores de cada objeto. Es mas facil si los nombres de las propiedades de tus objetos corresponden al nombre de los campos de tus formularios ya que podrias construir un metodo toArray para solo hacer:

Código PHP:
Ver original
  1. $form->populate($obj->toArray());
__________________
I see dead pixels
  #6 (permalink)  
Antiguo 13/08/2010, 01:45
 
Fecha de Ingreso: agosto-2010
Mensajes: 5
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Pasar parametros a formulario con ZEND (avanzado)

Gracias Serge! Ahora probare, tiene que ser eso fijo porque todo lo demas esta bien y no me da ningun error.
  #7 (permalink)  
Antiguo 13/08/2010, 04:29
 
Fecha de Ingreso: agosto-2010
Mensajes: 5
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Pasar parametros a formulario con ZEND (avanzado)

Solucionado!!!

He puesto esto:

Código PHP:
Ver original
  1. else {
  2.             $id = $this->_getParam('id', 0);
  3.             $data = $this->_getParam('data', 0);
  4.             $titol = $this->_getParam('titol', 0);
  5.             $textcurt = $this->_getParam('textcurt', 0);
  6.             $textllarg= $this->_getParam('textllarg', 0);
  7.  
  8.                if ($id > 0) {
  9.                   $noticia = Application_Model_DbTable_Noticies::getNoticiaById($id);
  10.  
  11.                   $date = array(
  12.                       'id' => $noticia->getId(),
  13.                       'data' => $noticia->getData(),
  14.                       'titol' => $noticia->getTitol(),
  15.                       'textcurt' => $noticia->getTextCurt(),
  16.                       'textllarg' => $noticia->getTextLlarg(),
  17.                   );
  18.                  
  19.                   $form->setDefaults($date);
  20.                   $this->view->form = $form;
  21.                }

Etiquetas: parametros, pasar, php, 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 04:27.