Ver código fonte

[EventDispatcher] Fix removeSubscriber() to work with priority syntax

Jeremy Mikola 13 anos atrás
pai
commit
39fabab013

+ 2 - 2
src/Symfony/Component/EventDispatcher/EventDispatcher.php

@@ -127,8 +127,8 @@ class EventDispatcher implements EventDispatcherInterface
      */
     public function removeSubscriber(EventSubscriberInterface $subscriber)
     {
-        foreach ($subscriber->getSubscribedEvents() as $eventName => $method) {
-            $this->removeListener($eventName, array($subscriber, $method));
+        foreach ($subscriber->getSubscribedEvents() as $eventName => $params) {
+            $this->removeListener($eventName, array($subscriber, is_string($params) ? $params : $params[0]));
         }
     }
 

+ 9 - 0
tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php

@@ -198,6 +198,15 @@ class EventDispatcherTest extends \PHPUnit_Framework_TestCase
         $this->assertFalse($this->dispatcher->hasListeners(self::preFoo));
         $this->assertFalse($this->dispatcher->hasListeners(self::postFoo));
     }
+
+    public function testRemoveSubscriberWithPriorities()
+    {
+        $eventSubscriber = new TestEventSubscriberWithPriorities();
+        $this->dispatcher->addSubscriber($eventSubscriber);
+        $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
+        $this->dispatcher->removeSubscriber($eventSubscriber);
+        $this->assertFalse($this->dispatcher->hasListeners(self::preFoo));
+    }
 }
 
 class TestEventListener