Configuration 将EventDispatcher放置在Symfony2中的何处,以及如何将其与注释一起使用?

Configuration 将EventDispatcher放置在Symfony2中的何处,以及如何将其与注释一起使用?,configuration,event-handling,annotations,symfony,dispatcher,Configuration,Event Handling,Annotations,Symfony,Dispatcher,我开始使用Symfony2框架进行开发,我喜欢使用Eventdispatcher。现在我有三个问题,我可以通过谷歌找到答案 我将调度器放置在何处,以便可以从中的任何地方访问它 tha应用程序 如何配置customevents?我应该将所有内容放在一个文件中还是 每捆一个 使用注释(即 @Eventsome.event?可能吗 一般的 我建议将EventDispatcher上的Symfony 2文档作为一个良好的起点,假设您的意思是希望提供自定义事件,而不是自定义事件调度器 活动地点 就位置而言,

我开始使用Symfony2框架进行开发,我喜欢使用Eventdispatcher。现在我有三个问题,我可以通过谷歌找到答案

我将调度器放置在何处,以便可以从中的任何地方访问它 tha应用程序

如何配置customevents?我应该将所有内容放在一个文件中还是 每捆一个

使用注释(即 @Eventsome.event?可能吗

一般的

我建议将EventDispatcher上的Symfony 2文档作为一个良好的起点,假设您的意思是希望提供自定义事件,而不是自定义事件调度器

活动地点

就位置而言,适当捆绑包中的“事件”文件夹是一个不错的选择。事件的实际调度很可能只发生在bundle上下文中,而侦听器可能驻留在其他地方。然而,这是一个单独的主题,相关性最小,因为他们只是订阅事件的字符串名称,例如“store.order”,以借用文档的示例,并且只需要了解事件的接口/类型

因此,在“Zap”命名空间中的“Bar”捆绑包中可能有一个名为“Foo”的事件:

namespace Zap\Bar\Event;

use Symfony\Component\EventDispatcher\Event;

class FooEvent extends Event
{
    // ...
}
然后,当您从bundle中分派事件时,您可以选择使用事件标识符'zap.bar.foo',当然,您可以从其他地方注册侦听器,以便在您认为合适的情况下收到关于此标识符的通知

访问事件调度器

在希望访问主EventDispatcher实例的位置,获取对依赖项注入容器的访问权并检索“event_dispatcher”服务。一种简单的方法是让类扩展“ContainerWare”,然后使用

$dispatcher = $this->container->get('event_dispatcher');
一般的

我建议将EventDispatcher上的Symfony 2文档作为一个良好的起点,假设您的意思是希望提供自定义事件,而不是自定义事件调度器

活动地点

就位置而言,适当捆绑包中的“事件”文件夹是一个不错的选择。事件的实际调度很可能只发生在bundle上下文中,而侦听器可能驻留在其他地方。然而,这是一个单独的主题,相关性最小,因为他们只是订阅事件的字符串名称,例如“store.order”,以借用文档的示例,并且只需要了解事件的接口/类型

因此,在“Zap”命名空间中的“Bar”捆绑包中可能有一个名为“Foo”的事件:

namespace Zap\Bar\Event;

use Symfony\Component\EventDispatcher\Event;

class FooEvent extends Event
{
    // ...
}
然后,当您从bundle中分派事件时,您可以选择使用事件标识符'zap.bar.foo',当然,您可以从其他地方注册侦听器,以便在您认为合适的情况下收到关于此标识符的通知

访问事件调度器

在希望访问主EventDispatcher实例的位置,获取对依赖项注入容器的访问权并检索“event_dispatcher”服务。一种简单的方法是让类扩展“ContainerWare”,然后使用

$dispatcher = $this->container->get('event_dispatcher');

要回答您的第一个问题:

我将调度器放置在何处,以便可以从tha应用程序中的任何位置访问它

事实上,正如前面所指出的,通过调用$dispatcher=$this->container->get'event_dispatcher'已经可以访问预配置的事件调度器服务;因此,您不必在任何地方创建自己的实例

但是,如果您需要自己的事件调度器,只需在服务配置文件(即捆绑包的services.xml)中对其进行如下配置:

<service id="my_dispatcher" class="Symfony\Component\EventDispatcher\EventDispatcher" />

当然,您可以使用自己的dispatcher类,只要它实现EventDispatcherInterface。

回答第一个问题:

我将调度器放置在何处,以便可以从tha应用程序中的任何位置访问它

事实上,正如前面所指出的,通过调用$dispatcher=$this->container->get'event_dispatcher'已经可以访问预配置的事件调度器服务;因此,您不必在任何地方创建自己的实例

但是,如果您需要自己的事件调度器,只需在服务配置文件(即捆绑包的services.xml)中对其进行如下配置:

<service id="my_dispatcher" class="Symfony\Component\EventDispatcher\EventDispatcher" />

当然,您可以使用自己的dispatcher类,只要它实现EventDispatcherInterface。

不,我喜欢使用dispatcher,但我不知道在我的应用程序中在何处创建和放置对象。第二个问题是配置,如果可能的话,在所有侦听器方法上都有注释。我已经扩展了我的答案,希望这能进一步有所帮助。我没有提到注释,因为我真的不确定您想要实现什么。非常感谢,但不幸的是,这对我没有帮助我需要一个调度器来触发一个事件。那么,应用程序中初始化调度程序的公共点在哪里呢?我怎么能
n从任何地方访问该对象?使用事件注释,我只想将一个方法标记为一个或多个事件的侦听器。不,我喜欢按原样使用Dispatcher,但我不知道在我的应用程序中在何处创建和放置该对象。第二个问题是配置,如果可能的话,在所有侦听器方法上都有注释。我已经扩展了我的答案,希望这能进一步有所帮助。我没有提到注释,因为我真的不确定您想要实现什么。非常感谢,但不幸的是,这对我没有帮助我需要一个调度器来触发一个事件。那么,应用程序中初始化调度程序的公共点在哪里呢?以及如何从任何地方访问该对象?使用事件注释,我只想将一个方法标记为一个或多个事件的侦听器。