Ver índice de contenidos del libro

6.11. Eventos de formulario

Los eventos de formulario son una novedad de Symfony 1.3 que permiten extender cualquier objeto de formulario desde cualquier punto del proyecto. Symfony incluye los siguientes cuatro eventos de formulario:

  • form.post_configure: este evento se notifica después de configurar cada formulario
  • form.filter_values: este evento se notifica cuando se combinan los valores y los arrays de archivos enviados por los usuarios justo antes de asociar los datos con el formulario
  • form.validation_error: este evento se notifica siempre que falla la validación del formulario
  • form.method_not_found: este evento se notifica siempre que se invoca un método desconocido

6.11.1. Mensajes de log propios mediante form.validation_error

Haciendo uso de los eventos de los formularios es posible añadir mensajes de log propios para los errores de validación de cualquier formulario del proyecto. Esto puede ser útil si quieres controlar los formularios y/o campos de formulario que están creando confusión entre los usuarios.

En primer lugar se registra un listener para el evento form.validation_error. Añade el siguiente método setup() en la clase ProjectConfiguration que se encuentra en el directorio config:

public function setup()
{
  // ...
 
  $this->getEventDispatcher()->connect(
    'form.validation_error',
    array('BaseForm', 'listenToValidationError')
  );
}

BaseForm, que se encuentra en lib/form, es una clase de formulario especial de la que heredan todas las clases de formulario. En esencia, BaseForm es una clase en la que se puede incluir código accesible por todos los formularios del proyecto. Para generar los mensajes de log de los errores de validación, simplemente añade el siguiente código en la clase BaseForm:

public static function listenToValidationError($event)
{
  foreach ($event['error'] as $key => $error)
  {
    self::getEventDispatcher()->notify(new sfEvent(
      $event->getSubject(),
      'application.log',
      array (
        'priority' => sfLogger::NOTICE,
        sprintf('Validation Error: %s: %s', $key, (string) $error)
      )
    ));
  }
}
Mensajes de log de los errores de validación

Figura 6.5 Mensajes de log de los errores de validación