概述 快速入门 教程 手册 最佳实践 组件 参考 贡献

发布于 2015-08-27 16:47:45 | 165 次阅读 | 评论: 0 | 来源: 网络整理

Introduction

The ContainerAwareEventDispatcher is a special EventDispatcher implementation which is coupled to the service container that is part of the DependencyInjection component. It allows services to be specified as event listeners making the EventDispatcher extremely powerful.

Services are lazy loaded meaning the services attached as listeners will only be created if an event is dispatched that requires those listeners.

Setup

Setup is straightforward by injecting a ContainerInterface into the ContainerAwareEventDispatcher:

use SymfonyComponentDependencyInjectionContainerBuilder;
use SymfonyComponentEventDispatcherContainerAwareEventDispatcher;

$container = new ContainerBuilder();
$dispatcher = new ContainerAwareEventDispatcher($container);

Adding Listeners

The Container Aware EventDispatcher can either load specified services directly, or services that implement EventSubscriberInterface.

The following examples assume the service container has been loaded with any services that are mentioned.

注解

Services must be marked as public in the container.

Adding Services

To connect existing service definitions, use the addListenerService() method where the $callback is an array of array($serviceId, $methodName):

$dispatcher->addListenerService($eventName, array('foo', 'logListener'));

Adding Subscriber Services

EventSubscribers can be added using the addSubscriberService() method where the first argument is the service ID of the subscriber service, and the second argument is the service’s class name (which must implement EventSubscriberInterface) as follows:

$dispatcher->addSubscriberService(
    'kernel.store_subscriber',
    'StoreSubscriber'
);

The EventSubscriberInterface will be exactly as you would expect:

use SymfonyComponentEventDispatcherEventSubscriberInterface;
// ...

class StoreSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            'kernel.response' => array(
                array('onKernelResponsePre', 10),
                array('onKernelResponsePost', 0),
            ),
            'store.order'     => array('onStoreOrder', 0),
        );
    }

    public function onKernelResponsePre(FilterResponseEvent $event)
    {
        // ...
    }

    public function onKernelResponsePost(FilterResponseEvent $event)
    {
        // ...
    }

    public function onStoreOrder(FilterOrderEvent $event)
    {
        // ...
    }
}
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务