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

Problema con Zend Form Elements

Estas en el tema de Problema con Zend Form Elements en el foro de Zend en Foros del Web. Hola a todos, Esta vez les traigo la siguiente cuestión, tengo como objetivo hacer un formulario con Zend_Form en el cual se cargue un elemento ...
  #1 (permalink)  
Antiguo 21/05/2012, 13:09
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Problema con Zend Form Elements

Hola a todos,

Esta vez les traigo la siguiente cuestión, tengo como objetivo hacer un formulario con Zend_Form en el cual se cargue un elemento por cada registro de una tabla de la BD. Pero algo raro sucede, creo que es mejor verlo que contarlo:

Bueno antes de eso creo que hay que agregar algo mas, en la tabla están los siguientes registros:



y al acceder a la acción se observa lo siguiente:




Ahora el código del form:

Código PHP:
public function init()
    {
        
/*
         * Acá inicializo el entity manager para poder usar Doctrine
         */
        
$registry Zend_Registry::getInstance();
        
$this->_em $registry->entitymanager;
        
        
$this->setMethod('post');
        
        
/*
         * Acá estoy ejecutando la consulta de la tabla que mencione
         */
        
$pruebas $this->_em->getRepository("Application_Model_PruebasCarrera")->findAll();
        
        
/*
         * Acá recorro el result de la consulta y por cada registro agrego un elemento al form
         */
        
foreach($pruebas as $prueba){
            
/*
             * Este array tiene parametros necesarios para el elemento, no es de importancia
             */
            
$prueba_data = array("titulo" => $prueba->getTitulo(), 
                        
"patrocinador" => "",
                        
"patrocinador_logo" => "",
                        
"enunciado" => "",
                        
"logo" => "",
                        
"respuesta" => "");
            
/*
             * Este elemento es personalizado creado por mi pero tampoco es importante y funciona muy bien,
             * hacer de cuenta que es un zend form element :D
             */
            
$prueba_element = new Cweb_Form_Element_Carrera('prueba'.$prueba->getId());
            
$prueba_element->setAttribs($prueba_data);
            
$prueba_element->setValue('90');
            
$this->addElement($prueba_element);
                
        }
        
        
        
$this->submit = new Zend_Form_Element_Submit('submit');
    } 
Lo ideal seria que saliera solo prueba 1, prueba 2 y prueba 3, no se en que parte del código html generado por el zend_form, se esta repitiendo lo mismo en cada paso del ciclo. Bueno eso es todo, quisiera saber si hay algo en lo que estoy fallando que hace que se repitan los elementos en el ciclo, puede ser el id del elemento aunque no veo claro que esta mal... Bueno se lo dejo a los expertos muchas gracias de antemano.
  #2 (permalink)  
Antiguo 21/05/2012, 14:18
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: Problema con Zend Form Elements

Verifica cuantos registros tienes en $prueba, usando var_dump($prueba) es probable que tengas 6 registros.
  #3 (permalink)  
Antiguo 21/05/2012, 14:46
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con Zend Form Elements

Si de hecho lo hice antes de postear la cuestión, hay 3 registros se puede ver acá... hice el mismo foreach en la vista sin el form:



En el controller:

Código PHP:
public function agregarAction()
    {
       
//la misma consulta de ahorita
       
$pruebas $this->_em->getRepository("Application_Model_PruebasCarrera")->findAll();
       
$this->view->pruebas $pruebas;
       
//var_dump($this->_getAllParams());
    

y en la vista:

Código PHP:
<?php foreach($this->pruebas as $prueba){ ?>
    <p><?= $prueba->getTitulo() ?></p>
    <?php ?>
  #4 (permalink)  
Antiguo 21/05/2012, 15:14
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: Problema con Zend Form Elements

Es muy raro, ¿haz comprobado que el loop se ejecute exactamente 3 veces? ¿Te salen 2 botones de submit?
  #5 (permalink)  
Antiguo 21/05/2012, 16:27
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con Zend Form Elements

Pues el botón de submit esta afuera del ciclo, yo diría que el problema esta en el html que genera el form pero no se como debuggear eso bien ._. por ahora la única opción que tengo es abstenerme de usar zend form y hacer eso a pulso en la vista lo cual es posible pero no quisiera llegar a eso aunque si toca ps toca.
  #6 (permalink)  
Antiguo 21/05/2012, 16:30
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: Problema con Zend Form Elements

Sí pero lo que quería comprobar es que se ejecutara dos veces el init() eso podría causar que se ejecute 2 veces tu ciclo.
  #7 (permalink)  
Antiguo 21/05/2012, 16:31
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: Problema con Zend Form Elements

Lo mejor en estos casos es hacer debug línea a línea usando xDebug así puedes ver el flujo tal cual de lo que esta haciendo tu código.
  #8 (permalink)  
Antiguo 21/05/2012, 16:43
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Problema con Zend Form Elements

Cita:
Iniciado por Tsugoi Ver Mensaje
por ahora la única opción que tengo es abstenerme de usar zend form y hacer eso a pulso en la vista lo cual es posible pero no quisiera llegar a eso aunque si toca ps toca.
Eso no es siquiera una opcion :P, ahora en serio, seria interesante ver la clase que genera ese html Cweb_Form_Element_Carrera.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 21/05/2012, 16:49
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con Zend Form Elements

Pues básicamente es un helper para el elemento carrera que lo que hace es mostrar una tabla que contiene un checkbox y unos datos necesarios a la hora de llenar el form, en este caso se necesita para seleccionar las preguntas de un cuestionario, por tal razón se necesita conocer una cantidad de información sobre cada pregunta y así facilitar su selección en el form. Entonces esta información se recibe por medio del parametro $attribs del element.

Código PHP:
class Cweb_View_Helper_CarreraElement extends Zend_View_Helper_FormElement{
    
    protected 
$html '';
    
    public function 
carreraElement($name$value$attribs null){
        
        
$helper = new Zend_View_Helper_FormCheckbox();
        
$helper->setView($this->view);
        
        
$this->html.='<table>';
        
$this->html.='<tr>';
        
$this->html.='<td style="padding: 3.5em">';
        
$this->html .= $helper->formCheckbox($name,$value,null,null);
        
$this->html.='</td>';
        
$this->html.='<td>';
        
$this->html.='<h3>'.$attribs["titulo"].'</h3><p>Patrocina: <img src="'.$attribs["patrocinador_logo"].'"> '.$attribs["patrocinador"].'</p><p>'.$attribs["enunciado"].'</p><p>Respuesta: '.$attribs["respuesta"].'</p>';
        
$this->html.='</td>';
        
$this->html.='<td style="padding: 1em">';
        
$this->html.='<img src="'.$attribs["logo"].'"><p style="font-size: 9px; text-align: center;">Logo prueba</p>';
        
$this->html.='</td>';
        
$this->html.='</tr>';
        
$this->html.= "</table>";
        
        return 
$this->html;
    }

Creo que intentare hacer el ciclo con un zend element a ver si el problema es mi elemento, les contaré lo que resulte luego...
  #10 (permalink)  
Antiguo 21/05/2012, 19:21
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con Zend Form Elements

Parece que si es el elemento que he creado, al hacerlo con un zend form element text salen 3 inputs que rayos xD no se donde esta el error pero al menos estoy mas cerca de descubrirlo ._.
  #11 (permalink)  
Antiguo 22/05/2012, 01:07
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: Problema con Zend Form Elements

Alomejor digo un disparate.. pero puede ser que tenga algo que ver con la concatenación de $this->html?

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #12 (permalink)  
Antiguo 22/05/2012, 09:02
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: Problema con Zend Form Elements

¿Podrías poner la clase Cweb_Form_Element_Carrera?
  #13 (permalink)  
Antiguo 22/05/2012, 12:37
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con Zend Form Elements

Holas, aquí esta... la clase llama al helper que puse ayer por eso no puse esta ._. no hay mucho q ver aca...

Código PHP:
class Cweb_Form_Element_Carrera extends Zend_Form_Element_Xhtml{
    
    public 
$helper "carreraElement";


Cita:
Iniciado por miktrv Ver Mensaje
Alomejor digo un disparate.. pero puede ser que tenga algo que ver con la concatenación de $this->html?

Un saludo!
Por cierto anoche estuve neciando esto y usted no dice ningún disparate era por eso xD ... parece que al tener la variable $html como atributo me daba problema, lo que hice fue crear la variable dentro del método del helper y quitarla del atributo ... funciona perfect !!

Etiquetas: Ninguno
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 16:56.