forms - symfony 3 - 如何在表单中添加事件订阅者作为服务

标签 forms symfony events service listener

在我的应用程序中,我为表单中的 onPostSubmit 事件创建了一个监听器。 我创建了一个实现 EventSubscriberInterface 的新类。 在 builderForm 中,我像这样添加了 evnet 订阅者: ->addEventSubscriber(new MyNewListener())

一切都很好,但不是我想要的......

在我的监听器中,我需要实体管理器来查询数据库。

我找到的第一个解决方案是通过选项在表单中添加实体管理器,并通过构造函数将其传递给监听器。现在的代码是: ->addEventSubscriber(new MyNewListener($options['entity_manager']))

这个解决方案有效,但我不想这样使用它,我更喜欢使用服务并在服务定义中添加实体管理器。

那么,我的问题是:如何将监听器声明为服务(并传递实体管理器)以及如何在表单声明中调用它?

感谢您的帮助。

最佳答案

只需将您的订阅者视为一项服务即可。

Yml 配置。如果您已 Autowiring 所有类,则可以节省 autowire:true:

services:
    My\Form\Type:
        autowire: true
        tags:
            - { name: form.type }

    My\Form\Listener\MyNewListener:
        autowire: true

表单类:

...

class MyForm extends AbstractType
{
    /**
     * @var MyNewListener
     */
    private $listener;

    /**
     * @param MyNewListener $listener
     */
    public function __construct(MyNewListener $listener)
    {
        $this->listener = $listener;
    }

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        ...
        $builder->addEventSubscriber($this->listener);
    }
}

关于forms - symfony 3 - 如何在表单中添加事件订阅者作为服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47156580/

相关文章:

html - 表单标签的语义

java - 寻找在 JSP 中传递关联数组的替代方法

php - 使用onChange、ajax、php和Mysql提交表单。Dropdown列表的值不会发送到php提交页面

php - 存储可从管理员界面配置的应用程序设置的最佳方式?

php - Symfony2 : how to check if an action is secured?

java - 为什么 DelayQueue 没有默认的 Delayed java 实现?

javascript - 触发器的jquery返回

javascript - 选择框属性更改时未触发 Webkit Mutation Observer 回调

php - Controller 和 URL 的设计思路 - Symfony2

当我单击图像时,jQuery 单击事件不会被触发