A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

7.7. Un Formulario de Modelo

Un modelo de formulario es usualmente una clase PHP que crea un número de campos. La clase base para todos los formularios de modelos es la clase Form definida en el componente Zend\Form.

Los campos en el modelo de formulario puede opcionalmente ser agrupado dentro de conjuntos de campos. De hecho, el propio modelo de formulario se puede considerar como un conjunto de campos. Este hecho se refleja en la herencia de la clase formulario (figura 7.10).

Figura 7.10. Herencia de la clase Form Figura 7.10. Herencia de la clase Form

Como podemos ver en la figura la clase Form extiende de la clase Fieldset. La clase Fieldset a su vez se deriva de la clase Element que representa un solo campo de formulario y sus atributos.

Esta herencia de clases puede parecer estraña a primera vista pero todo se vuelve lógico si recordamos que la clase Form hereda métodos para agregar campos de formulario desde la clase Fieldset que hereda métodos para colocar atributos de formulario desde la clase Element.

Abajo, proveemos el esbozo de una clase modelo para el formulario de contacto de nuestro ejemplo anterior:

<?php
namespace Application\Form;

use Zend\Form\Form;

// A feedback form model
class ContactForm extends Form
{
  // Constructor.
  public function __construct()
  {
    // Define form name
    parent::__construct('contact-form');

    // Set POST method for this form
    $this->setAttribute('method', 'post');

    // (Optionally) set action for this form
    $this->setAttribute('action', '/contactus');

    // Create the form fields here ...
  }
}

Como podemos ver los modelos de formulario del módulo Application del sitio web pertenecen por convención al namespace Application\Form (línea 2).

En la línea 7 definimos la clase para el modelo de formulario ContactForm que extiende de la clase base Form.

En la línea 10 definimos el método contructor para la clase. Como derivamos nuestro modelo de formulario de la clase base Form debemos llamar al constructor de clase parent para inicializarlo (línea 13). El constructor de la clase padre acepta un argumento opcional que permite colocar el nombre del formulario ('contact-form').

Además, podemos colocar el método de envio de datos del formulario (POST) usando el método setAttribute() que provee la clase base (línea 16). El método setAttribute() toma dos parámetros: el primero de ellos es el nombre del atributo que se va a colocar y el segundo es el valor del atributo.

También podemos colocar el atributo "action" del formulario (línea 19) con el método setAttribute() de manera analoga a como lo hicimos con el atributo method. Pero como veremos más adelante colocar el atributo "action" del formulario es opcional.

Colocar el atributo "action" en el formulario es opcional porque la ausencia de este atributo fuerza a enviar los datos del formulario a la URL de la página actual. Esto es suficiente en la mayoría de los escenarios porque usualmente usamos una sola acción de controlador tanto para imprimir el formulario como para procesar sus datos.

Los campos se crean generalmente dentro del constructor del modelo de formulario (ver línea 21). En la siguiente sección aprenderemos cuales campos de formulario están disponibles y como agregarlos al modelo de formulario.


Top