diff --git a/src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php b/src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php index 22a36f6a6d..14202600cc 100755 --- a/src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php +++ b/src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php @@ -131,14 +131,30 @@ class DoctrineMongoDBExtension extends Extension $odmConfigDef->addMethodCall($method, array($arg)); } + // event manager + $eventManagerName = isset($documentManager['event_manager']) ? $documentManager['event_manager'] : $documentManager['name']; + $eventManagerId = sprintf('doctrine.odm.mongodb.%s_event_manager', $eventManagerName); + if (!$container->hasDefinition($eventManagerId)) { + $eventManagerDef = new Definition('%doctrine.odm.mongodb.event_manager_class%'); + $eventManagerDef->addMethodCall('loadTaggedEventListeners', array( + new Reference('service_container'), + sprintf('doctrine.odm.mongodb.%s_event_listener', $eventManagerName), + )); + $eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array( + new Reference('service_container'), + sprintf('doctrine.odm.mongodb.%s_event_subscriber', $eventManagerName), + )); + $container->setDefinition($eventManagerId, $eventManagerDef); + } + $odmDmArgs = array( new Reference(sprintf('doctrine.odm.mongodb.%s_connection', isset($documentManager['connection']) ? $documentManager['connection'] : $documentManager['name'])), new Reference(sprintf('doctrine.odm.mongodb.%s_configuration', $documentManager['name'])), - new Reference('doctrine.odm.mongodb.event_manager'), + new Reference($eventManagerId), ); $odmDmDef = new Definition('%doctrine.odm.mongodb.document_manager_class%', $odmDmArgs); $odmDmDef->setFactoryMethod('create'); - $container->setDefinition(sprintf('doctrine.odm.mongodb.%s_document_manager', $documentManager['name']), $odmDmDef ); + $container->setDefinition(sprintf('doctrine.odm.mongodb.%s_document_manager', $documentManager['name']), $odmDmDef); if ($documentManager['name'] == $defaultDocumentManager) { $container->setAlias( diff --git a/src/Symfony/Bundle/DoctrineMongoDBBundle/Event/EventManager.php b/src/Symfony/Bundle/DoctrineMongoDBBundle/Event/EventManager.php index fcb0ffd483..68443ab556 100644 --- a/src/Symfony/Bundle/DoctrineMongoDBBundle/Event/EventManager.php +++ b/src/Symfony/Bundle/DoctrineMongoDBBundle/Event/EventManager.php @@ -10,19 +10,12 @@ class EventManager extends BaseEventManager /** * Loads event listeners from the service container. * - * A service can be marked as an event listener using the - * "doctrine.odm.mongodb.event_listener" tag: - * - * - * - * - * - * * @param TaggedContainerInterface $container The service container + * @param string $tagName The name of the tag to load */ - public function loadTaggedEventListeners(TaggedContainerInterface $container) + public function loadTaggedEventListeners(TaggedContainerInterface $container, $tagName) { - foreach ($container->findTaggedServiceIds('doctrine.odm.mongodb.event_listener') as $id => $instances) { + foreach ($container->findTaggedServiceIds($tagName) as $id => $instances) { $events = array(); foreach ($instances as $attributes) { if (isset($attributes['event'])) { @@ -42,15 +35,12 @@ class EventManager extends BaseEventManager * A service can be marked as an event subscriber using the * "doctrine.odm.mongodb.event_subscriber" tag: * - * - * - * - * * @param TaggedContainerInterface $container The service container + * @param string $tagName The name of the tag to load */ - public function loadTaggedEventSubscribers(TaggedContainerInterface $container) + public function loadTaggedEventSubscribers(TaggedContainerInterface $container, $tagName) { - foreach ($container->findTaggedServiceIds('doctrine.odm.mongodb.event_subscriber') as $id => $instances) { + foreach ($container->findTaggedServiceIds($tagName) as $id => $instances) { $this->addEventSubscriber($container->get($id)); } }