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 formularioform.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 formularioform.validation_error
: este evento se notifica siempre que falla la validación del formularioform.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)
)
));
}
}