【问题标题】:How can an object subscribe to an event?对象如何订阅事件?
【发布时间】:2013-10-23 08:19:02
【问题描述】:

我有一个实现EventSubscriberInterface 的订阅者。但是在Event dispatcher component documentation中,据说订阅一个事件,我应该调用$dispatcher->addSubscriber()

现在,对于我的示例,假设您有一个Mailer 类,它订阅一些事件并发送电子邮件。我的基本问题是,我在哪里可以将它添加到应用程序中,以便将该对象添加为应用程序范围的侦听器?换句话说,我应该在哪里调用必然在事件发生之前运行的$dispatcher->addSubscriber()

【问题讨论】:

标签: php symfony mediator


【解决方案1】:

我一遍又一遍地重复自己:

开发人员的规则 1(一):手册页是程序员最好的朋友

你想知道的都在Symfony Docs,你感兴趣的部分如下:

配置监听器/订阅者

现在这个类已经创建好了,你只需要将它注册为一个服务并使用一个特殊的“标签”通知 Symfony 它是 kernel.exception 事件的一个“监听器”: YAML

# app/config/config.yml
services:
    kernel.listener.your_listener_name:
        class: Acme\DemoBundle\EventListener\AcmeExceptionListener
        tags:
            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }

【讨论】:

  • 如果我正确理解了您的答案和文档页面,这仅适用于 Doctrin,而不是与数据库无关的自定义事件。我的问题是关于这些类型的事件,而不是由于与数据库交互而发生的事件。
  • 事件是 DI 容器的一部分...在哪里触发事件并不重要,要设置监听器/订阅者,您在注入监听类时使用 tag 属性
  • 您能否编辑您的答案,以便以后发现我的问题的人更清楚地反映这一点?也许使用下面的链接,因为它更通用,并且不仅仅是基于 Doctrin。非常感谢。链接是symfony.com/doc/current/cookbook/service_container/…
  • 完成。虽然用户应该知道服务容器不仅仅用于 Doctrine
猜你喜欢
  • 2017-08-09
  • 2010-11-20
  • 1970-01-01
  • 2022-10-17
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
相关资源
最近更新 更多