Ahora que sabemos como colocar el nombre del formulario, la acción y los métodos para los atributos y como agregar campos (elementos) al formulario vamos a completar la clase modelo para el formulario de contacto que usamos en el ejemplo anterior.
Como sabemos las clases de modelo para el módulo Application
están dentro
del namespace Application\Form
. Así, debemos crear el archivo ContactForm.php
dentro de la carpeta Form que esta dentro de la carpeta src del módulo
Application (figura 7.14).
Tendremos dos métodos en nuestra clase formulario:
__construct()
constructor definirá el nombre del formulario y el método
(POST) e inicializa el formulario agregando sus elementos.addElements()
contendrá el código actual para agregar
los elementos del formulario y será llamado por el constructor.Colocamos la lógica de creación de campos dentro del método privado
addElements()
para tener una mejor estructura en el código del modelo del formulario.
El código de la clase ContactForm
se muestra abajo:
<?php
namespace Application\Form;
use Zend\Form\Form;
/**
* This form is used to collect user feedback data like user E-mail,
* message subject and text.
*/
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');
// Add form elements
$this->addElements();
}
// This method adds elements to form (input fields and
// submit button).
private function addElements()
{
// Add "email" field
$this->add([
'type' => 'text',
'name' => 'email',
'attributes' => [
'id' => 'email'
],
'options' => [
'label' => 'Your E-mail',
],
]);
// Add "subject" field
$this->add([
'type' => 'text',
'name' => 'subject',
'attributes' => [
'id' => 'subject'
],
'options' => [
'label' => 'Subject',
],
]);
// Add "body" field
$this->add([
'type' => 'text',
'name' => 'body',
'attributes' => [
'id' => 'body'
],
'options' => [
'label' => 'Message Body',
],
]);
// Add the submit button
$this->add([
'type' => 'submit',
'name' => 'submit',
'attributes' => [
'value' => 'Submit',
],
]);
}
}
Arriba en la línea 10 definimos la clase ContactForm
que extiende a la clase
base Form
.
En las líneas 13-23 tenemos el método constructor. Él llama al constructor
de la clase base (línea 16) y pasa el nombre del formulario como su argumento
("contact-form"). En la línea 19, el método setAttribute()
de la clase base
se llama para colocar el nombre del método para el formulario, en este caso
colocamos el método POST.
En la línea 22 se llama al método privado addElements()
que es quien realmente
agrega los elementos al formulario. El código del método addElements()
está entre las líneas 27-73. Para agregar elementos al formulario llamamos
al método add()
que provee la clase base. Este método acepta un solo
argumento, un arreglo que contiene la configuración del elemento. Agregamos
cuatro campos: el email
, el subject
, el body
y el campo submit
.
En la figura 7.15 podemos ver una representación gráfica esquemática del modelo de formulario que hemos creado.
Figura 7.15. El modelo del formulario de contacto y sus elementos