I want to add event listener to all symfony forms on pre_set_data.
I have service and tag for this { name: kernel.event_listener, event: form.pre_set_data, method: onSetData}
The event listener is registered and I can see it with php app/console debug:event-dispatcher
but is is never called.
When I add the event directly to the form using ->addEventListener(FormEvents::PRE_SET_DATA, function(){ ... })
it is working.
How I can add this event listener globally ? to all forms?
A simple way would be to create a form extension that extends the base form type, and register your event listener there:
<?php
namespace AppBundle\Form\Extension;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
class FormTypeExtension extends AbstractTypeExtension
{
/**
* @inheritdoc
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function () {
// skip...
});
}
/**
* @inheritdoc
*/
public function getExtendedType()
{
return FormType::class;
}
}
with:
# config/services.yaml
services:
# ...
AppBundle\Form\Extension\FormTypeExtension:
tags:
- { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }