[DoctrineMongoDBBundle] added ability to register global listeners and subscribers via the DIC

This commit is contained in:
Kris Wallsmith 2010-11-06 11:17:54 -07:00 committed by Fabien Potencier
parent da188734d8
commit b932441ac9
2 changed files with 16 additions and 4 deletions

View File

@ -136,10 +136,16 @@ class DoctrineMongoDBExtension extends Extension
$eventManagerId = sprintf('doctrine.odm.mongodb.%s_event_manager', $eventManagerName); $eventManagerId = sprintf('doctrine.odm.mongodb.%s_event_manager', $eventManagerName);
if (!$container->hasDefinition($eventManagerId)) { if (!$container->hasDefinition($eventManagerId)) {
$eventManagerDef = new Definition('%doctrine.odm.mongodb.event_manager_class%'); $eventManagerDef = new Definition('%doctrine.odm.mongodb.event_manager_class%');
$eventManagerDef->addMethodCall('loadTaggedEventListeners', array(
new Reference('service_container'),
));
$eventManagerDef->addMethodCall('loadTaggedEventListeners', array( $eventManagerDef->addMethodCall('loadTaggedEventListeners', array(
new Reference('service_container'), new Reference('service_container'),
sprintf('doctrine.odm.mongodb.%s_event_listener', $eventManagerName), sprintf('doctrine.odm.mongodb.%s_event_listener', $eventManagerName),
)); ));
$eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array(
new Reference('service_container'),
));
$eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array( $eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array(
new Reference('service_container'), new Reference('service_container'),
sprintf('doctrine.odm.mongodb.%s_event_subscriber', $eventManagerName), sprintf('doctrine.odm.mongodb.%s_event_subscriber', $eventManagerName),

View File

@ -10,10 +10,15 @@ class EventManager extends BaseEventManager
/** /**
* Loads event listeners from the service container. * Loads event listeners from the service container.
* *
* <service class="MyListener">
* <tag name="doctrine.odm.mongodb.event_listener" event="prePersist" />
* <tag name="doctrine.odm.mongodb.event_listener" event="preUpdate" />
* </service>
*
* @param TaggedContainerInterface $container The service container * @param TaggedContainerInterface $container The service container
* @param string $tagName The name of the tag to load * @param string $tagName The name of the tag to load
*/ */
public function loadTaggedEventListeners(TaggedContainerInterface $container, $tagName) public function loadTaggedEventListeners(TaggedContainerInterface $container, $tagName = 'doctrine.odm.mongodb.event_listener')
{ {
foreach ($container->findTaggedServiceIds($tagName) as $id => $instances) { foreach ($container->findTaggedServiceIds($tagName) as $id => $instances) {
$events = array(); $events = array();
@ -32,13 +37,14 @@ class EventManager extends BaseEventManager
/** /**
* Loads event subscribers from the service container. * Loads event subscribers from the service container.
* *
* A service can be marked as an event subscriber using the * <service class="MySubscriber">
* "doctrine.odm.mongodb.event_subscriber" tag: * <tag name="doctrine.odm.mongodb.event_subscriber" />
* </service>
* *
* @param TaggedContainerInterface $container The service container * @param TaggedContainerInterface $container The service container
* @param string $tagName The name of the tag to load * @param string $tagName The name of the tag to load
*/ */
public function loadTaggedEventSubscribers(TaggedContainerInterface $container, $tagName) public function loadTaggedEventSubscribers(TaggedContainerInterface $container, $tagName = 'doctrine.odm.mongodb.event_subscriber')
{ {
foreach ($container->findTaggedServiceIds($tagName) as $id => $instances) { foreach ($container->findTaggedServiceIds($tagName) as $id => $instances) {
$this->addEventSubscriber($container->get($id)); $this->addEventSubscriber($container->get($id));