Explorar o código

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

Kris Wallsmith %!s(int64=14) %!d(string=hai) anos
pai
achega
b932441ac9

+ 6 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php

@@ -136,10 +136,16 @@ class DoctrineMongoDBExtension extends Extension
         $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'),
+            ));
             $eventManagerDef->addMethodCall('loadTaggedEventListeners', array(
                 new Reference('service_container'),
                 sprintf('doctrine.odm.mongodb.%s_event_listener', $eventManagerName),
             ));
+            $eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array(
+                new Reference('service_container'),
+            ));
             $eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array(
                 new Reference('service_container'),
                 sprintf('doctrine.odm.mongodb.%s_event_subscriber', $eventManagerName),

+ 10 - 4
src/Symfony/Bundle/DoctrineMongoDBBundle/Event/EventManager.php

@@ -10,10 +10,15 @@ class EventManager extends BaseEventManager
     /**
      * 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 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) {
             $events = array();
@@ -32,13 +37,14 @@ class EventManager extends BaseEventManager
     /**
      * Loads event subscribers from the service container.
      *
-     * A service can be marked as an event subscriber using the
-     * "doctrine.odm.mongodb.event_subscriber" tag:
+     *     <service class="MySubscriber">
+     *         <tag name="doctrine.odm.mongodb.event_subscriber" />
+     *     </service>
      *
      * @param TaggedContainerInterface $container The service container
      * @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) {
             $this->addEventSubscriber($container->get($id));