Table of Contents
Questions & Feedback
Found a typo or an error?
Want to improve this document? Edit it.
Need support or have a technical question?
Post to the user mailing-list.
Master Symfony2 fundamentals
Symfony hosting done right
Discover the SensioLabs Support
Le Répartiteur d'évènement du Container Aware
Le Répartiteur d'évènement du Container Aware¶
New in version 2.1: Cette fonctionnalité a été déplacée dans l'« EventDispatcher » dans Symfony 2.1.
Introduction¶
La classe ContainerAwareEventDispatcher
est une implémentation spéciale du répartiteur d'évènement qui est couplé au conteneur
de services qui fait partie du composant d'Injection de Dépendance.
Il permet aux services d'être spécifiés en tant que « listeners »
d'évènement rendant le répartiteur d'évènement extrêmement puissant.
Les services sont chargés de manière fainéante (« lazy loading » en anglais), ce qui signifie que les services attachés en tant que « listeners » ne seront créés que si un évènement qui est réparti nécessite ces « listeners ».
Installation¶
L'installation est très facile et nécessite uniquement l'injection d'une interface
ContainerInterface dans la classe
ContainerAwareEventDispatcher:
1 2 3 4 5 | use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher;
$container = new ContainerBuilder();
$dispatcher = new ContainerAwareEventDispatcher($container);
|
Ajouter des « Listeners »¶
Le Répartiteur d'Évènement du Container Aware peut soit directement
charger des services spécifiques, soit des services qui implémentent
EventSubscriberInterface.
Les exemples suivants supposent que le conteneur de services a été chargé avec tous les services qui sont mentionnés.
Note
Les services doivent être marqués comme publics dans le conteneur.
Ajouter des services¶
Pour connecter des définitions de service existantes, utilisez la méthode
addListenerService()
où le $callback est un tableau de array($serviceId, $methodName):
1 | $dispatcher->addListenerService($eventName, array('foo', 'logListener'));
|
Ajouter des services souscripteurs¶
Les « EventSubscribers » peuvent être ajoutés en utilisant la méthode
addSubscriberService()
où le premier argument est l'ID du service souscripteur, et où le second argument
est le nom de la classe du service (qui doit implémenter
EventSubscriberInterface) comme suit:
1 | $dispatcher->addSubscriberService('kernel.store_subscriber', 'StoreSubscriber');
|
L'EventSubscriberInterface va ressembler exactement à ce à quoi vous vous attendez:
1 2 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 | use Symfony\Component\EventDispatcher\EventSubscriberInterface;
// ...
class StoreSubscriber implements EventSubscriberInterface
{
static public 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)
{
// ...
}
}
|





is a trademark of Fabien Potencier. All rights reserved.