From 69d324eca8370cd496792cd277989427d406affa Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 18 Mar 2011 09:00:58 +0100 Subject: [PATCH] [EventDispatcher] added EventDispatcher::removeSubscriber() --- .../Component/EventDispatcher/EventDispatcher.php | 8 ++++++++ .../EventDispatcher/EventDispatcherInterface.php | 7 +++++++ .../Component/EventDispatcher/EventDispatcherTest.php | 11 +++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/Symfony/Component/EventDispatcher/EventDispatcher.php b/src/Symfony/Component/EventDispatcher/EventDispatcher.php index ed960da0fbe5..fb0dff029be6 100644 --- a/src/Symfony/Component/EventDispatcher/EventDispatcher.php +++ b/src/Symfony/Component/EventDispatcher/EventDispatcher.php @@ -157,6 +157,14 @@ public function addSubscriber(EventSubscriberInterface $subscriber, $priority = $this->addListener($subscriber->getSubscribedEvents(), $subscriber, $priority); } + /** + * @see EventDispatcherInterface::removeSubscriber + */ + public function removeSubscriber(EventSubscriberInterface $subscriber) + { + $this->removeListener($subscriber->getSubscribedEvents(), $subscriber); + } + /** * Triggers the listener method for an event. * diff --git a/src/Symfony/Component/EventDispatcher/EventDispatcherInterface.php b/src/Symfony/Component/EventDispatcher/EventDispatcherInterface.php index 2ce076a54063..443ea1fcd795 100644 --- a/src/Symfony/Component/EventDispatcher/EventDispatcherInterface.php +++ b/src/Symfony/Component/EventDispatcher/EventDispatcherInterface.php @@ -61,6 +61,13 @@ function addSubscriber(EventSubscriberInterface $subscriber, $priority = 0); */ function removeListener($eventNames, $listener); + /** + * Removes an event subscriber. + * + * @param EventSubscriberInterface $subscriber The subscriber. + */ + function removeSubscriber(EventSubscriberInterface $subscriber); + /** * Gets the listeners of a specific event or all listeners. * diff --git a/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php b/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php index a221a441059f..dfcc5e7124e3 100644 --- a/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php +++ b/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php @@ -168,6 +168,17 @@ public function testAddSubscriber() $this->assertTrue($this->dispatcher->hasListeners(self::preFoo)); $this->assertTrue($this->dispatcher->hasListeners(self::postFoo)); } + + public function testRemoveSubscriber() + { + $eventSubscriber = new TestEventSubscriber(); + $this->dispatcher->addSubscriber($eventSubscriber); + $this->assertTrue($this->dispatcher->hasListeners(self::preFoo)); + $this->assertTrue($this->dispatcher->hasListeners(self::postFoo)); + $this->dispatcher->removeSubscriber($eventSubscriber); + $this->assertFalse($this->dispatcher->hasListeners(self::preFoo)); + $this->assertFalse($this->dispatcher->hasListeners(self::postFoo)); + } } class TestEventListener