Bladeren bron

[FrameworkBundle] allowed a service to register a kernel listener more than once for a given event

Fabien Potencier 14 jaren geleden
bovenliggende
commit
611a4a212c
1 gewijzigde bestanden met toevoegingen van 6 en 5 verwijderingen
  1. 6 5
      src/Symfony/Bundle/FrameworkBundle/ContainerAwareEventDispatcher.php

+ 6 - 5
src/Symfony/Bundle/FrameworkBundle/ContainerAwareEventDispatcher.php

@@ -68,7 +68,7 @@ class ContainerAwareEventDispatcher extends EventDispatcher
             throw new \InvalidArgumentException('Expected an array("service", "method") argument');
         }
 
-        $this->listenerIds[$eventName][$callback[0].'::'.$callback[1]] = array($callback[0], $callback[1], $priority);
+        $this->listenerIds[$eventName][] = array($callback[0], $callback[1], $priority);
     }
 
     /**
@@ -86,14 +86,15 @@ class ContainerAwareEventDispatcher extends EventDispatcher
                 list($serviceId, $method, $priority) = $args;
                 $listener = $this->container->get($serviceId);
 
-                if (!isset($this->listeners[$eventName][$serviceId])) {
+                $key = $serviceId.$method;
+                if (!isset($this->listeners[$eventName][$key])) {
                     $this->addListener($eventName, array($listener, $method), $priority);
-                } elseif ($listener !== $this->listeners[$eventName][$serviceId]) {
-                    $this->removeListener($eventName, array($this->listeners[$eventName][$serviceId], $method));
+                } elseif ($listener !== $this->listeners[$eventName][$key]) {
+                    $this->removeListener($eventName, array($this->listeners[$eventName][$key], $method));
                     $this->addListener($eventName, array($listener, $method), $priority);
                 }
 
-                $this->listeners[$eventName][$serviceId] = $listener;
+                $this->listeners[$eventName][$key] = $listener;
             }
         }