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.13. Ayudantes de Vista Estándares para Formularios

Los ayudantes de vista estándar para formularios provistos por ZF3 se muestran en las tablas 7.13 - 7.16 más abajo. Estas clases se encuentran en el namespace Zend\Form\View\Helper. Como podemos ver en la tabla los ayudantes de vista se pueden dividir en las siguientes categorías:

Tabla 7.13. Ayudantes de vista diseñados para usarse con formularios
Nombre del Método Descripción
Ayudantes Genéricos
Form Imprime el formulario completo y todos sus elementos.
FormElement Imprime un elemento generico del formulario.
FormElementErrors Imprime errores de validación para un elemento del formulario.
FormRow Imprime la etiqueta, el campo y los errores de validación.
Tabla 7.14. Ayudantes para campos de HTML 4
Nombre del Método Descripción
FormButton Imprime el campo de formulario <button>.
FormCheckbox Imprime el campo de formulario <input type="checkbox">.
FormFile Imprime el campo de formulario <input type="file">.
FormHidden Imprime el campo de formulario <input type="hidden">.
FormInput Imprime un campo <input>.
FormImage Imprime el campo de formulario <input type="image">.
FormLabel Imprime el campo de formulario <label>.
FormPassword Imprime el campo de formulario <input type="password">.
FormRadio Imprime el campo de formulario <input type="radio">.
FormReset Imprime el campo de formulario <input type="reset">.
FormSelect Imprime el campo de formulario <select> (menú desplegable).
FormSubmit Imprime el campo de formulario <input type="submit">.
FormText Imprime el campo <input type="text">.
FormTextarea Imprime el campo <textarea> (texto de multiples líneas).
Tabla 7.15. Ayudantes para campos de HTML 5
Nombre del Método Descripción
FormColor Imprime el campo de formulario de HTML 5 <input type="color">.
FormDate Imprime el campo de formulario de HTML 5 <input type="date">.
FormDateTime Imprime el campo de formulario de HTML 5 <input type="date">.
FormDateTimeLocal Imprime el campo de formulario de HTML 5 <input type="datetime-local">.
FormEmail Imprime el campo de formulario de HTML 5 <input type="email">.
FormMonth Imprime el campo de formulario de HTML 5 <input type="month">.
FormNumber Imprime el campo de formulario de HTML 5 <input type="number">.
FormRange Imprime el campo de formulario de HTML 5 <input type="range">.
FormTel Imprime el campo de formulario de HTML 5 <input type="tel">.
FormTime Imprime el campo de formulario de HTML 5 <input type="time">.
FormUrl Imprime el campo de formulario de HTML 5 <input type="url">.
FormWeek Imprime el campo de formulario de HTML 5 <input type="week">.
Tabla 7.16. Otros ayudantes
Nombre del Método Descripción
FormCaptcha Imprime el campo de seguridad CAPTCHA.
FormDateSelect Imprime el campo de seguridad date.
FormDateTimeSelect Imprime el campo de seguridad datetime.
FormMonthSelect Imprime el campo de selección de mes.
FormMultiCheckbox Imprime el campo para casillas de verificación multiple.
FormCollection Imprime el campo para una colección de elementos.

En las secciones siguientes daremos una visión general de varios ayudantes de vista para formularios que se usan frecuentemente junto con unos ejemplos de su uso.

7.13.1. Imprimir un Elemento del Formulario

Podemos imprimir un campo del formulario con el ayudante de vista FormElement. Se diseño pensando en maximizar la flexibilidad y reconoce tanto tipos de campo como es posible. Con este ayudante de vista podemos producir código HTML para campos de texto, botones, menús desplegables, etc.

Los métodos que provee este ayudante de vista se listan en la tabla 7.17.

Tabla 7.17. Métodos que provee el ayudante de vista FormElement
Nombre del método Descripción
render($element) Método mágico de PHP que imprime el campo de formulario dado.
__invoke($element) Método mágico de PHP que imprime el campo de formulario dado (el efecto es el mismo que con render()).

Como podemos ver existen dos métodos que hacen la misma cosa:

<?php
// We assume that the form model is stored in $form variable.
// Render the E-mail field with the render() method.
echo $this->formElement()->render($form->get('email')); ?>

// The same, but with __invoke
echo $this->formElement($form->get('email'));

Cuando se ejecuta el código de arriba genera el siguiente código HTML:

<input type="text" name="email" id="email" value="">

Generalmente no es necesario llamar al ayudante de vista con un campo HTML (o HTML5) concreto (ejemplo, FormText, FormSubmit, etc.) En su lugar podemos usar el ayudante de vista genérico FormElement que determina el tipo de campo automáticamente y produce el código HTML necesario.

7.13.2. Imprimir los Errores de Validación del Elemento

La clase de ayudante de vista FormElementErrors permite producir código HTML para los campos de validación de errores (si están presentes). Si no existen errores de validación para un determinado elemento este ayudante de vista no producen ninguna salida.

Un ejemplo del uso del ayudante de vista FormElementErrors se presenta abajo:

<?php
// We assume that the form model is stored in $form variable.
// Render validation errors for the E-mail field.
echo $this->formElementErrors($form->get('email'));

Si existe algún error de validación este código generará una lista no ordenada de errores usando la etiqueta HTML <ul> y la lista contendrá tantos elementos como errores existan para el campo. Un ejemplo de una lista como esta para el campo de correo electrónico del formulario de contacto se muestra abajo.

<ul>
  <li>&#039;hostname&#039; is not a valid hostname for the email address</li>
  <li>The input does not match the expected structure for a DNS hostname</li>
  <li>The input appears to be a local network name but local network names are not allowed</li>
</ul>

7.13.3. Imprimir la Etiqueta del Elemento

El ayudante FormLabel permite imprimir la etiqueta de texto para un elemento:

<?php
// We assume that the form model is stored in $form variable.
// Render text label for the E-mail field.
echo $this->formLabel($form->get('email'));

Cuando se ejecuta el código de arriba se genera el siguiente código HTML:

<label for="email">Your E-mail</label>

7.13.4. Imprimir un Formuario en Columna

El ayudate de vista FormRow está diseñado para simplificar la impresión de un campo de formulario, su etiqueta y los posibles errores de validación. Con esta clase podemos imprimirlos en un solo paso. Este ayudate es flexible en su configuración, con lo que se puede aplicar una decoración diferente a la columna del formulario. Los métodos de esta clase ayudante de vista se listan en la tabla 7.18.

Tabla 7.18. Métodos provistos por el ayudante de vista FormRow
Nombre del Método Descripción
render($element) Imprime una columna del formulario.
__invoke($element, $labelPosition, $renderErrors, $partial) Imprime una columna del formulario (envoltorio conveniente).
setInputErrorClass($inputErrorClass) Coloca la clase CSS para los errores de entrada.
setLabelAttributes($labelAttributes) Coloca atributos de la etiqueta.
setLabelPosition($labelPosition) Indica la posición de la etiqueta (antes o después del campo).
setRenderErrors($renderErrors) Establece (boole) si los errores son impresos por este ayudante.
setPartial($partial) Coloca un script de vista parcial para usar en la impresión de la columna.

Un ejemplo de uso del ayudante de vista FormRow se presenta abajo:

<?php
// We assume that the form model is stored in $form variable.
// Render the E-mail field, its label and (possible) validation errors.
echo $this->formRow($form->get('email'));

Cuando se ejecuta el código de arriba se genera un código HTML como el siguiente:

<label for="email">Your E-mail</label>
<input type="text" name="email" id="email">
<ul>
  <li>&#039;hostname&#039; is not a valid hostname for the email address</li>
  <li>The input does not match the expected structure for a DNS hostname</li>
  <li>The input appears to be a local network name but local network names
      are not allowed</li>
</ul>

7.13.5. Imprimir el Formulario Completo

El ayudante de vista Form permite imprimir la etiqueta de apertura <form> con sus atributos y la etiqueta de cierre </form>. Pero el principal propósito es imprimir el formulario completo y todos sus campos con una sola línea de código. Los métodos públicos de la clase ayudante de vista Form se resumen en la tabla 7.19.

Tabla 7.19. Métodos provistos por el ayudante de vista From
Nombre del Método Descripción
render($form) Imprime el formulario completo y sus elementos.
__invoke($form) Método mágico de PHP que imprime el formulario completo y todos sus elementos (el efecto es el mismo que con render()).
openTag($form) Imprime la etiqueta de apertura <form>.
closeTag() Imprime la etiqueta de cierre </form>.

Podemos imprimir todo el formulario con la ayuda del método render() de Form.

// We assume that the form model is stored in $form variable

// Render the whole form
echo $this->form()->render($form);

El mismo efecto se consigue con el método mágico __invoke (ver más abajo):

// The same, but with `__invoke`
echo $this->form($form);

Top