容器感知事件分派器

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.3,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

容器感知事件分派器

3.3

ContainerAwareEventDispatcher类在Symfony 3.3中已弃用,它将在Symfony 欧宝娱乐app下载地址4.0中被移除。使用EventDispatcher而是使用闭包代理注入。

简介

ContainerAwareEventDispatcher是特别的EventDispatcher实现,该实现耦合到服务容器的一部分DependencyInjection组件.它允许将服务指定为事件侦听器,从而使EventDispatcher非常强大。

服务是惰性加载的,这意味着作为侦听器附加的服务只有在需要这些侦听器的事件被分派时才会创建。

设置

通过注入ContainerInterfaceContainerAwareEventDispatcher

1 2 3 4 5
使用欧宝娱乐app下载地址组件DependencyInjectionContainerBuilder使用欧宝娱乐app下载地址组件EventDispatcherContainerAwareEventDispatcher容器ContainerBuilder ();调度程序ContainerAwareEventDispatcher (容器);

添加侦听器

ContainerAwareEventDispatcher是否可以直接加载指定的服务或实现的服务EventSubscriberInterface

下面的示例假设服务容器已经加载了所提到的任何服务。

请注意

服务必须在容器中标记为公共。

添加服务

要连接现有服务定义,请使用addListenerService ()方法,其中美元的回调的数组。阵列(serviceId, methodName美元)

1
调度程序->addListenerService (eventName数组“foo”“logListener”));

添加用户业务

事件订阅者可以使用addSubscriberService ()方法,其中第一个参数是订阅者服务的服务ID,第二个参数是服务的类名(必须实现EventSubscriberInterface),详情如下:

1 2 3 4
调度程序->addSubscriberService (“kernel.store_subscriber”“StoreSubscriber”);

EventSubscriberInterface正如你所料:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
使用欧宝娱乐app下载地址组件EventDispatcherEventSubscriberInterface使用欧宝娱乐app下载地址组件HttpKernelKernelEvents/ /……StoreSubscriber实现了EventSubscriberInterface公共静态函数getSubscribedEvents()返回数组(KernelEvents::响应= >数组数组“onKernelResponsePre”10),数组“onKernelResponsePost”0), ),“store.order”= >数组“onStoreOrder”0),);}公共函数onKernelResponsePre(FilterResponseEvent事件/ /……公共函数onKernelResponsePost(FilterResponseEvent事件/ /……公共函数onStoreOrder(FilterOrderEvent事件/ /……}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。