我想将事件侦听器添加到pre_set_data上的所有Symfony表单。
我有此{ name: kernel.event_listener, event: form.pre_set_data, method: onSetData}
事件听众已注册,我可以用php app/console debug:event-dispatcher
看到它,但从未被调用。
当我使用->addEventListener(FormEvents::PRE_SET_DATA, function(){ ... })
直接将事件添加到表单时,它正在工作。
如何在全球添加此事件侦听器?到所有形式?
一种简单的方法是创建一个扩展基本表单类型的表单扩展名,并在此处注册事件侦听器:
<?php
namespace AppBundleFormExtension;
use SymfonyComponentFormAbstractTypeExtension;
use SymfonyComponentFormExtensionCoreTypeFormType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormFormEvents;
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:
# ...
AppBundleFormExtensionFormTypeExtension:
tags:
- { name: form.type_extension, extended_type: SymfonyComponentFormExtensionCoreTypeFormType }