Lo que el Helper hace a grandes razgos

Que hacen los fields?

El modelo sabe como poner la información proveniente de un formulario en la BD pero no conoce el detalle particular de las reglas de cada campo, validación, formateo, etc.
La vista sabe como armar un formulario normal, uno por idiomas, pero no conoce los templates ni las particularidades de cada template dependiendo del tipo de dato.

Aqui es donde entran la clase HelperField y todas sus hijas: HelperTextField, HelperDateField, HelperEmailField, HelperIntField, HelperFloatField, etc.
Ellas proveen de la información particular sobre el tipo de campo y también permiten ser configuradas a gusto.
Aqui es donde cumple un papel fundamental la configuración por comentarios en la BD. Un método que permite desde la bd misma, al crear la tabla, setear las particularidades en el comportamiento de cada campo.

Cada Field cumple dos papeles: uno en la alta/modificación del dato y otro al mostrarlo
Para ello, cada uno de los hijos de esta clase tiene al menos 3 métodos claves:

Constructor:
Este método crea el campo y setea su configuración, sus códigos de error, la ubicación de sus templates. Prepara al objeto para que uno de los dos métodos siguientes sea ejecutado.
Validador: ($objeto->validate();)
El método validate se llama al intentar guardar el dato en la BD. checkeará que el campo cumpla con sus requisitos (ej: email bien formateado, si es obligatorio) y ademas formatea el dato para ser guardado (ej: formato fecha a formato mysql)
Cargar campo html ($objeto->loadFieldHTML();)
Este método genera el subtemplate html del campo en base a la información cargada en el constructor. Si el campo contiene un error producto del método validate, muestra el campo con el error correspondiente.

Podemos volver a analizar el código de ejemplo que se dio anteriormente

$data = $modelo->validate();         // Validar datos, por defecto el modelo tomara el arreglo $_POST

if ($modelo->hasErrors($data))         // Si hay errores
{
    $vista->setTemplate("contacto");         // Armar formulario de nuevo
    $vista->createForm($data);
    $vista->parseTemplate();
}
else
{
    $modelo->setData($data);         // De lo contrario guardar en la BD
}

Podemos ver como el $data que se envia al createForm(); es el que salió del validate();. En el validate la clase correspondiente al campo intenta detectar los errores y de encontrarlos agrega el error en la estructura $data, luego al recibirlo el createForm que también utiliza los fields sabrá marcar que campos contienen errores, el resultado será algo como esto:

Errores al validar

La mayoría de las veces el código y las invocaciones a los fields permanecerán invisibles a nosotros ya que se ejecutan dentro del modelo y la vista, sin embargo extender un field o crear uno nuevo para agregar comportamientos y que puedan reutilizarse es muy sencillo. Los fields se encuentran en el archivo /include/helper.fields.php

De todas formas, siempre es posible crear un field al vuelo en el controlador con algo como $campo_dirrecion_email = new HelperEmailField($data["email"],$config); Sin embargo son muy pocas las veces en las que es necesario recurrir a esto.

De esta forma acaba el tutorial, puedes seguir consultando las referencias para dudas particulares. Como un apéndice, agregamos un elemento mas al tutorial con ejemplos de códigos para resolver alguna situaciones comunes.

Paso siguiente: Algunos casos comunes