Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO Mejor forma de crear campos de un formulario

Estas en el tema de Mejor forma de crear campos de un formulario en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, Suponiendo que tengo una clase Formulario y luego tantas clases como tipos de campo que soporta el Formulario... ¿Qué es mejor, crear los campos ...
  #1 (permalink)  
Antiguo 06/07/2012, 17:59
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 10 meses
Puntos: 8
Mejor forma de crear campos de un formulario

Hola,

Suponiendo que tengo una clase Formulario y luego tantas clases como tipos de campo que soporta el Formulario...

¿Qué es mejor, crear los campos a través del formulario o crear los campos por fuera y luego enlazarlos con el formulario?

Para que quede más claro pongo un poco de pseudocódigo

Creando campos a través del formulario:
Código PHP:
$Form = new cForm ("MiFormulario");
$Form->CrearTextarea ("MiTextarea");
$Form->DarValorCampo ("MiTextarea""BlaBlaBla"
Creando campos por fuera y enlazándolos:
Código PHP:
$Form = new cForm ("MiFormulario");
$Textarea = new cTextarea ("MiTextarea");
$Textarea->SetValor "BlaBlaBla";
$Form->EnlazarCampo ($Textarea); 
Gracias!
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #2 (permalink)  
Antiguo 06/07/2012, 19:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Mejor forma de crear campos de un formulario

Es más limpio a mi parecer la segunda opción ya que así no tienes que contaminar la clase cForm con tareas que no son de la clase (recuerda principio de polimorfismo).

También puedes tener un método init() y heredar la clase y así en el método init de las subclases crear y atar los elementos que necesites.

Saludos.
  #3 (permalink)  
Antiguo 07/07/2012, 09:24
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Mejor forma de crear campos de un formulario

Cita:
Es más limpio a mi parecer la segunda opción ya que así no tienes que contaminar la clase cForm con tareas que no son de la clase (recuerda principio de polimorfismo).
Si veo lo que me dices de contaminar la clase cForm pero me dejas un poco contrariado con la coletilla del polimorfismo ya que es en la primera opción donde precisamente estoy haciendo polimorfismo (o eso creo), mientras que en la segunda simplemente estoy enlazando los campos y la "configuración" del campo la hago por fuera del formulario.

Vuelvo a poner el código de la primera opción con unos pequeños cambios.
Código PHP:
Class cForm
{
    private 
$Campos = array();

    public function 
CrearCampo ($Tipo$Nombre)
    {
        
$this->Campos[$Nombre] = new $Tipo ($Nombre);
    }

    public function 
DarValorCampo ($Nombre$Valor)
    {
        
$this->Campos[$Nombre]->SetValor $Valor;
    }
}

$Form = new cForm ("MiFormulario");
$Form->CrearCampo ("Textarea""MiTextarea");
$Form->DarValorCampo ("MiTextarea""BlaBlaBla"
Cita:
También puedes tener un método init() y heredar la clase y así en el método init de las subclases crear y atar los elementos que necesites.
Esto se escapa a mis conocimientos actuales , ¿me puedes pasar alguna referencia o poner algún ejemplo?

Gracias!
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #4 (permalink)  
Antiguo 07/07/2012, 10:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Mejor forma de crear campos de un formulario

Respecto a lo primero te digo, al contaminar la clase con cosas que no deberían de pertenecer a esa clase rompes con un diseño más puro de tu clase, es por eso que te decía que lo que debes de hacer es solo "adjuntar" los métodos al formulario.

Respecto a tu segunda duda es algo sencillo:
Código PHP:
Ver original
  1. class CForm {
  2.          public function __construct()
  3.          {
  4.                   // cosas para la construccion
  5.                   $this->init();
  6.          }
  7.  
  8.          public function init()
  9.          {
  10.                  // aqui es donde puedes heredar e iniciar tu forma
  11.          }
  12. }
  13.  
  14. class MiFormulario extends cForm
  15. {
  16.          public function init()
  17.          {
  18.                    $this->addElement(new cText('blah'));
  19.                    $this->addElement(new cTextarea('blah2'));
  20.          }
  21. }
  22.  
  23. $form = new MiFormulario();

Saludos.
  #5 (permalink)  
Antiguo 07/07/2012, 12:46
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Mejor forma de crear campos de un formulario

Vale, perfecto, precisamente el trozo de código que pusiste es justo lo que tenía en mente.
Tener una clase base Formulario (que sería abstracta) y luego cada formulario tener su propia clase que hereda de la clase base Formulario. y es en esa clase que hereda donde personalizar el formulario con sus campos y demás historias.

Lo que no entiendo es por qué tener el método Init y no hacerlo en el construct, tal que:
Código PHP:
class cForm {
         public function 
__construct()
         {
         }
}
 
class 
MiFormulario extends cForm
{
         public function 
__construct()
         {
                   
$this->addElement(new cText('blah'));
                   
$this->addElement(new cTextarea('blah2'));

                   
parent::__construct();
         }
}
 
$form = new MiFormulario(); 
Total, que si he entendido bien la clase quedaría así:
Código PHP:
class cForm
{
    private 
$Campos = array();

    public function 
addCampo ($Campo)
    {
        
$this->Campos[$Campo->GetNombre()] = $Campo;
    }

    public function 
DarValorCampo ($Campo$Valor)
    {
        
$this->Campos[$Campo]->SetValor $Valor;
    }
}

class 
cMiForm extends cForm
{
    public function 
__construct ()
    {
        
$this->addCampo(new cTextarea('MiTextarea'));
    }
}

$MiForm = new cMiForm();
$MiForm->DarValorCampo('MiTextarea''Blablabla'); 
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #6 (permalink)  
Antiguo 07/07/2012, 14:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Mejor forma de crear campos de un formulario

Pues todo depende, si haces tareas de construcción específicas, sería bueno tener un método init para que si se olvidan hacer el parent::__construct() no quede tu objeto en un estado que no sea funcional.

Saludos.
  #7 (permalink)  
Antiguo 07/07/2012, 16:32
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Mejor forma de crear campos de un formulario

Ok, gracias GatorV
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #8 (permalink)  
Antiguo 08/07/2012, 12:00
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Mejor forma de crear campos de un formulario

Yo utilizaría la 2da opcion como te dice GatorV. Para asi desacoplar los componentes del formulario del formulario como tal. Así puedo agregar nuevos componentes sin tener que editar el código de mi clase formulario (y así mantengo el principio OCP, también el SRP).

Lo que si te recomiendo es la parte de:
Código PHP:
Ver original
  1. class cForm
  2. {
  3.     private $Campos = array();
  4.  
  5.     public function addCampo (Campo $Campo) //Mejor uso del POLIMORFISMO
  6.     {
  7.         $this->Campos[$Campo->GetNombre()] = $Campo;
  8.     }
  9. }

La clase formulario no debe estar encargada de darle los valores a los input que contiene. Talvez si deba mantener el estado y llamar alguna funcion del mismo campo para setear el valor, pero no encargarse el mismo de darselo.
  #9 (permalink)  
Antiguo 09/07/2012, 11:47
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Mejor forma de crear campos de un formulario

Cita:
La clase formulario no debe estar encargada de darle los valores a los input que contiene. Talvez si deba mantener el estado y llamar alguna funcion del mismo campo para setear el valor, pero no encargarse el mismo de darselo.
Creo que me he perdido.

¿Según tu comentario esto estaría mal?:
Código PHP:
class cForm
{
    private 
$Campos = array();

    public function 
addCampo (cCampo $Campo)
    {
        
$this->Campos[$Campo->GetNombre()] = $Campo;
    }

    public function 
SetTitleCampo ($NombreCampo$Title)
    {
        
$this->Campos[$NombreCampo]->SetTitle $Title;
    }
}

class 
cMiForm extends cForm
{
    public function 
__construct ()
    {
        
$this->addCampo(new cTextarea('MiTextarea'));
        
$this->SetTitleCampo ('MiTextarea''Tooltip explicativo de MiTextarea');
    }
}

$MiForm = new cMiForm(); 
¿Según tu comentario esto estaría bien?:
Código PHP:
class cForm
{
    private 
$Campos = array();

    public function 
addCampo (cCampo $Campo)
    {
        
$this->Campos[$Campo->GetNombre()] = $Campo;
    }
}

class 
cMiForm extends cForm
{
    public function 
__construct ()
    {
        
$Textarea = new cTextarea('MiTextarea');
        
$Textarea->SetTitle('Tooltip explicativo de MiTextarea');
        
$this->addCampo($Textarea);
    }
}

$MiForm = new cMiForm(); 
En caso de que el segundo código sea el correcto, ¿cómo podría cambiar el title del campo una vez que he hecho el $MiForm = new cMiForm();? Tendría que tener un método para recoger el campo, cambiarle el title y volver a hacer un addCampo?

Gracias!
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #10 (permalink)  
Antiguo 09/07/2012, 12:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Mejor forma de crear campos de un formulario

Claro recuerda que en PHP todos los objetos se devuelven por referencia:
Código PHP:
Ver original
  1. $campo = $form->getField('foo');
  2. $campo->setTitle('el titulo');
  3. $campo->setValue('valor');
  4. $campo->foo('bar');

Saludos.

Etiquetas: campos, 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 19:06.