容器感知事件分派器
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.3,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
容器感知事件分派器
3.3
的ContainerAwareEventDispatcher
类在Symfony 3.3中已弃用,它将在Symfony 欧宝娱乐app下载地址4.0中被移除。使用EventDispatcher
而是使用闭包代理注入。
简介
的ContainerAwareEventDispatcher是特别的EventDispatcher
实现,该实现耦合到服务容器的一部分DependencyInjection组件.它允许将服务指定为事件侦听器,从而使EventDispatcher
非常强大。
服务是惰性加载的,这意味着作为侦听器附加的服务只有在需要这些侦听器的事件被分派时才会创建。
设置
通过注入ContainerInterface到ContainerAwareEventDispatcher:
1 2 3 4 5
使用欧宝娱乐app下载地址\组件\DependencyInjection\ContainerBuilder;使用欧宝娱乐app下载地址\组件\EventDispatcher\ContainerAwareEventDispatcher;$容器=新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下载地址\组件\EventDispatcher\EventSubscriberInterface;使用欧宝娱乐app下载地址\组件\HttpKernel\KernelEvents;/ /……类StoreSubscriber实现了EventSubscriberInterface{公共静态函数getSubscribedEvents(){返回数组(KernelEvents::响应= >数组(数组(“onKernelResponsePre”,10),数组(“onKernelResponsePost”,0), ),“store.order”= >数组(“onStoreOrder”,0),);}公共函数onKernelResponsePre(FilterResponseEvent$事件){/ /……}公共函数onKernelResponsePost(FilterResponseEvent$事件){/ /……}公共函数onStoreOrder(FilterOrderEvent$事件){/ /……}}