Los formularios de Symfony 1.4

2.3. Personalizando los validadores

2.3.1. Personalizar los mensajes de error

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.')),
    ));
  }
}
Mensajes de error propios

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:

Error producido porque el mensaje es muy corto

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.',
      )),
    ));
  }
}
Mensajes de error personalizados con variables

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.)

Nota 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