Los formularios de Symfony 1.4

Capítulo 13. Validadores

13.1. Introducción

El framework de formularios de Symfony incluye muchos validadores útiles que cubren las necesidades comunes de la mayoría de proyectos. En este capítulo se describen detalladamente todos los validadores que incluye por defecto Symfony. También se explican los validadores incluidos en los plugins sfPropelPlugin y sfDoctrinePlugin, ya que estos plugins los desarrollan los creadores de Symfony e incluyen muchos validadores útiles.

Nota Aunque no utilices el framework Symfony, puedes hacer uso de los validadores incluidos en sfFormExtraPlugin, sfPropelPlugin y sfDoctrinePlugin simplemente copiando el directorio validator/ de cada plugin en algún lugar de tu proyecto.

Antes de profundizar en los detalles de cada validador, veamos las características comunes de todos los validadores.

13.1.1. La clase base sfValidatorBase

Todos los validadores de Symfony heredan de la clase base sfValidator, que proporciona las características comunes de todos los validadores.

La finalidad de los validadores consiste en limpiar y validar los valores originales.

Cuando se crea un validador, se le pueden pasar como argumentos opcionales diferentes opciones y mensajes de error:

$v = new sfValidatorString(
  array('required' => true),
  array('required' => 'Este valor es obligatorio.')
);

Las opciones y los mensajes de error también se pueden establecer con los métodos setOptions() y setMessages():

$v = new sfValidatorString();
$v->setOptions(array('required' => true));
$v->setMessages(array('required' => 'Este valor es obligatorio.'));

Si se quiere establecer una opción o mensaje de error individual, se pueden utilizar los métodos setOption() y setMessage():

$v = new sfValidatorString();
$v->setOption('required', true);
$v->setMessage('required', 'Este valor es obligatorio.');

Los valores originales se pueden validar con el método clean():

$valorLimpio = $v->clean('nombre', 'valor', array('class' => 'foo'));

El método clean() toma como argumento el valor original y devuelve el valor limpio. Si se produce un error de valiación, se lanza una excepción de tipo sfValidatorError.

Nota Los validadores no almacenan información sobre su estado, lo que significa que una sola instancia de un validador puede validar tantos valores como necesites.

sfValidatorBase define las siguientes opciones por defecto:

Opción Error Descripción
required required Vale true si el valor es obligatorio y false en cualquier otro caso (su valor por defecto es true)
trim - Vale true si se deben eliminar los espacios en blanco del principio y del final del valor y false en cualquier otro caso (su valor por defecto es false)
empty_value - Valor vacío que se devuelve cuando el valor no es obligatorio

sfValidatorBase también define los siguientes mensajes de error por defecto:

Error Descripción
required Mensaje de error que se muestra cuando el valor original está vacío pero es obligatorio (por defecto el mensaje que se muestra es Required)
invalid Mensaje de error genérico que se muestra cuando se produce un error (por defecto el mensaje que se muestra es Invalid)

Para modificar los mensajes por defecto de los errores required y invalid, puedes utilizar los métodos setRequiredMessage() y setInvalidMessage():

sfValidatorBase::setRequiredMessage('Este valor es obligatorio.');
sfValidatorBase::setInvalidMessage('Este valor no es válido.');

Los mensajes de error pueden contener variables en forma de cadenas de texto encerradas por %. Las variables se sustituyen por sus valores durante la ejecución de la aplicación. Todos los mensajes de error tienen acceso directo al valor original mediante una variable llamada %value%. Además, los mensajes de error pueden definir sus propias variables.

Nota En la siguiente sección no se menciona la variable %value% porque siempre está disponible.

Algunos validadores necesitan conocer la codificación que utiliza el valor original. Por defecto la codificación utilizada es UTF-8, pero se puede configurar cualquier otra codificación mediante el método setCharset():

sfValidatorBase::setCharset('ISO-8859-1');

Nota Si utilizas los validadores de Symfony dentro de un proyecto Symfony, la codificación se obtiene directamente del archivo de configuración settings.yml.

13.1.2. Esquema de validadores

Un esquema de validadores es un validador especial que agrupa uno o varios validadores.

Si se produce un error, el esquema de validadores lanza una excepción de tipo sfValidatorErrorSchema.