Como se aprecia en la figura 2-4 anterior, los mensajes de error por defecto no son muy útiles. A continuación se muestra cómo personalizarlos para que sean más intuitivos.
Todos los validadores pueden añadir errores en el formulario. Un error está formado por un código de error y un mensaje de error. Cada validador dispone al menos de los errores required y invalid, definidos en la clase sfValidatorBase:
| Código | Mensaje | Descripción |
|---|---|---|
required | Required. | Es obligatorio rellenar el campo y ahora está vacío |
invalid | Invalid. | La información del campo no es válida |
A continuación se muestran los códigos de error de los validadores que se han visto hasta ahora:
| Validador | Código de error |
|---|---|
sfValidatorString | max_length, min_length |
sfValidatorEmail | - |
sfValidatorChoice | - |
Para personalizar los mensajes de error, se pasa un segundo argumento a los objetos validadores. El listado 2-4 personaliza varios mensajes de error y la figura 2-5 muestra el resultado.
Listado 2-4 - Personalizando mensajes de error
class ContactoForm extends sfForm { protected static $asuntos = array('Asunto A', 'Asunto B', 'Asunto C'); public function configure() { // ... $this->setValidators(array( 'nombre' => new sfValidatorString(array('required' => false)), 'email' => new sfValidatorEmail(array(), array('invalid' => 'La dirección de email no es válida.')), 'asunto' => new sfValidatorChoice(array('choices' => array_keys(self::$asuntos))), 'mensaje' => new sfValidatorString(array('min_length' => 4), array('required' => 'Es obligatorio escribir un mensaje.')), )); } }
Figura 2.5. Mensajes de error propios
La figura 2-6 muestra el mensaje de error que se obtiene si se envía un mensaje muy corto, ya que se ha establecido que su longitud mínima debe ser cuatro caracteres:
Figura 2.6. Error producido porque el mensaje es muy corto
El mensaje de error por defecto asociado con el código de error min_length es diferente de los otros mensajes de error, ya que dispone de dos variables: los datos introducidos por el usuario (foo en el ejemplo anterior) y el número mínimo de caracteres de este campo (4 en el ejemplo anterior). El listado 2-5 personaliza aún más el mensaje de error utilizando estas dos vairables y la figura 2-7 muestra el resultado.
Listado 2-5 - Personalizando los mensajes de error con variables
class ContactoForm extends sfForm { public function configure() { // ... $this->setValidators(array( 'nombre' => new sfValidatorString(array('required' => false)), 'email' => new sfValidatorEmail(array(), array('invalid' => 'La dirección de email no es válida.')), 'asunto' => new sfValidatorChoice(array('choices' => array_keys(self::$asuntos))), 'mensaje' => new sfValidatorString(array('min_length' => 4), array( 'required' => 'Es obligatorio escribir un mensaje.', 'min_length' => 'El mensaje "%value%" es demasiado corto. Su longitud debe ser al menos de %min_length% caracteres.', )), )); } }
Figura 2.7. Mensajes de error personalizados con variables
Todos los mensajes de error pueden utilizar variables simplemente encerrando su nombre con el carácter del porcentaje (%). Las variables disponibles normalmente son los datos introducidos por el usuario (que se llama value) y los valores definidos por cada validador (min_length, max_length, etc.)
Si quieres conocer todos los códigos de error, opciones y mensajes por defecto de los validadores, puedes consultar la documentación online de la API en http://www.symfony-project.org/api/1_2/ Por ejemplo, las opciones, códigos y mensajes de error del validador sfValidatorString se pueden consultar en http://www.symfony-project.org/api/1_2/sfValidatorString
Capítulo original en inglés Chapter 2 - Form Validation Traducido por Javier Eguíluz