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

Extender Zend_Form

Estas en el tema de Extender Zend_Form en el foro de Zend en Foros del Web. Hola ! Estoy extendiendo Zend_Form para hacer formularios que tengan algunas de sus propiedades iguales. Esto es: Código PHP: <?php class  My_Form  extends  Zend_Form { ...
  #1 (permalink)  
Antiguo 10/04/2009, 16:02
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 2 meses
Puntos: 2
Extender Zend_Form

Hola !

Estoy extendiendo Zend_Form para hacer formularios que tengan algunas de sus propiedades iguales. Esto es:

Código PHP:
<?php
class My_Form extends Zend_Form
{
    public function 
__construct($options null)
    {
        
parent::__construct($options);
    }
    public function 
init()
    {
        
$this->setAttrib('accept-charset''UTF-8');
    }
}
Luego todos los forms que crease extenderían de "My_Form" y entonces estos ya deberían tener el accept-charset seteado a UTF-8. Tal que así:

Código PHP:
<?php
class My_Form_RegisterForm extends My_Form
{
    public function 
__construct($options null)
    {            
        
parent::__construct($options);
    }
    public function 
init()
    {
        
// Aquí trabajaríamos
        // ...
    
}
}
Sin embargo, esto no me está funcionando... el markup del formulario aparece sin el atributo del accept-charset, además el ejemplo que he puesto es resumido para ganar en brevedad.

Los archivos completos los pongo aquí ;) , a continuación:
http://pastebin.com/f60a96819 Clase My_App3_Form (equivalente a My_Form aki)
http://pastebin.com/f6e42c82d Clase My_App3_Form_RegisterForm (equivalente a My_Form_RegisterForm aki)

El código no presenta mensajes por lo menos por errores sintacticos. Y el formulario, se renderiza, funciona, valida. etc...
El código del accept-charset es correcto, pues si lo pongo en la clase *_RegisterForm si funciona.

No acabo de entender por que no funciona !!! El procedimiento con la herencia es correcto no ?

Gracias ; )

Última edición por yoguuu; 10/04/2009 a las 16:10
  #2 (permalink)  
Antiguo 10/04/2009, 22:26
Avatar de pablofmorales  
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 222
Antigüedad: 15 años, 11 meses
Puntos: 37
Respuesta: Extender Zend_Form

Estas pisando el metodo init, tendrias que hacer un parent::init(); para que te ejecute el metodo de la clase padre.

O bien hacerlo en el constructor. Y dejar el init para las clases hijas. COmo prefieras
__________________
blog
  #3 (permalink)  
Antiguo 11/04/2009, 04:27
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: Extender Zend_Form

Muchas gracias Pablo !!

Se me pasaron por completo las llamadas al init... La solución al problema es la siguiente:
Código PHP:
<?php
    
// En las clases hijas (en este caso, con hacerlo solo en la clase final de la herencia sería funcional)
    
public function __construct($options null)
    {
        
parent::__construct($options);
        
parent::init();
    }
Ahora si puedo comenzar a extender realmente y quitar cosas de la clase más hija jeje, las que son comunes a todos los forms...

El problema residiría en que los miembros init() al llamarse igual entran en conflicto sin embargo esto no pasaría con los constructores gracias a que referenciamos __construct(); no ?

Cuando el __construct() de una clase de ZF se ejecuta, al final del todo ejecuta su init(); Entonces yo pensé... Pues hago parent::__construct($options); y listo !! Pero el problema es ese no ? que los init() al llamarse igual, una vez se han llegado a llamar los dos... el ultimo en la ejecución se come al penultimo....

Última edición por yoguuu; 11/04/2009 a las 04:51
  #4 (permalink)  
Antiguo 11/04/2009, 22:05
Avatar de pablofmorales  
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 222
Antigüedad: 15 años, 11 meses
Puntos: 37
Respuesta: Extender Zend_Form

Tambien podes evitar el uso del constructor en las clases hijas, y solo usar el init
__________________
blog
  #5 (permalink)  
Antiguo 12/04/2009, 06:13
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: Extender Zend_Form

Uhm y hacer la llamada a parent::__construct($options); desde el init ?

No me funciona si le paso al init el argumento... init($options = NULL);

La página suelta un error de carga y no se muestra...

ACTUALIZO: Es más, solo me funciona la herencia (al estar el codigo en init) si llamo a parent::init(); en el constructor... Pero no solo usando el init propio de los hijos...

Uhmm ¿ Como propones entonces para librarse de la llamada a __construct(); ?

Última edición por yoguuu; 12/04/2009 a las 06:32
  #6 (permalink)  
Antiguo 12/04/2009, 09:46
Avatar de pablofmorales  
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 222
Antigüedad: 15 años, 11 meses
Puntos: 37
Respuesta: Extender Zend_Form

No lo llames.

El constructor se inicializa cuando haces $form = new My_Form_RegisterForm();

El init se ejecuta despues del constructor por eso no podes agregar el parent::__construct en el el init.

Sino tenes nada en el constructor ni de MY_Form ni de My_Form_RegisterForm ni siquiera lo uses. Por que automaticamente va a tomar el del padre de My_Form que es Zend_Form. Al que estas llamando con el parent.
__________________
blog
  #7 (permalink)  
Antiguo 13/04/2009, 08:53
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: Extender Zend_Form

Uhmm entiendo,

Estoy mal acostumbrado de los tutoriales de herencia, que dicen que HAY que llamar a parent::__construct(), obvié el porke y el cuando.

Merci tiu
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 00:04.