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));
}
}