SymfonyWorld Online 2020
100% online
30+ talks + workshops
Live + Replay watch talks later
WARNING: You are browsing the documentation for Symfony 2.1 which is not maintained anymore. Consider upgrading your projects to Symfony 5.1.

The Container Aware Event Dispatcher

The Container Aware Event Dispatcher

New in version 2.1: This feature was moved into the EventDispatcher component in Symfony 2.1.


The Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher is a special event dispatcher implementation which is coupled to the service container that is part of the Dependency Injection component. It allows services to be specified as event listeners making the event dispatcher 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 is straightforward by injecting a Symfony\Component\DependencyInjection\ContainerInterface into the Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher:

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher;

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

Adding Listeners

The Container Aware Event Dispatcher can either load specified services directly, or services that implement Symfony\Component\EventDispatcher\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 Symfony\Component\EventDispatcher\EventSubscriberInterface) as follows:


The EventSubscriberInterface will be exactly as you would expect:

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
// ...

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)
        // ...

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.