我想在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(){ ... })
将事件直接添加到表单时,它正在运行。
如何全局添加此事件侦听器?各种形式?
答案 0 :(得分:1)
一种简单的方法是创建一个扩展基本表单类型的form extension,并在那里注册您的事件监听器:
<?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;
}
}
使用:
# config/services.yaml
services:
# ...
AppBundle\Form\Extension\FormTypeExtension:
tags:
- { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }