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:
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.
Paso siguiente: Algunos casos comunes