Jelajahi Sumber

[FrameworkBundle] Optimization of the method ContainerAwareEventDispacther::dispatch()

Victor Berchet 14 tahun lalu
induk
melakukan
6ae61eb9ff

+ 7 - 3
src/Symfony/Bundle/FrameworkBundle/ContainerAwareEventDispatcher.php

@@ -85,12 +85,16 @@ class ContainerAwareEventDispatcher extends EventDispatcher
     {
         if (isset($this->listenerIds[$eventName])) {
             foreach ($this->listenerIds[$eventName] as $serviceId => $priority) {
-                if (isset($this->listeners[$eventName][$serviceId])) {
+                $listener = $this->container->get($serviceId);
+
+                if (!isset($this->listeners[$eventName][$serviceId])) {
+                    $this->addListener($eventName, $listener, $priority);
+                } elseif ($listener !== $this->listeners[$eventName][$serviceId]) {
                     $this->removeListener($eventName, $this->listeners[$eventName][$serviceId]);
+                    $this->addListener($eventName, $listener, $priority);
                 }
-                $listener = $this->container->get($serviceId);
+
                 $this->listeners[$eventName][$serviceId] = $listener;
-                $this->addListener($eventName, $listener, $priority);
             }
         }