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).
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 claseFieldset
que hereda métodos para colocar atributos de formulario desde la claseElement
.
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.