如何在 symfony 表单中添加全局事件监听器
How to add global event listener in symfony forms
我想为 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(){ ... })
将事件直接添加到表单时,它正在工作。
如何全局添加此事件侦听器?所有表格?
一个简单的方法是创建一个扩展基本表单类型的 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 }
我想为 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(){ ... })
将事件直接添加到表单时,它正在工作。
如何全局添加此事件侦听器?所有表格?
一个简单的方法是创建一个扩展基本表单类型的 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 }