diff --git a/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php b/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php index 8415ee14b6..9b3c1595a4 100644 --- a/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php +++ b/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php @@ -164,11 +164,22 @@ class ContainerAwareEventManager extends EventManager private function initializeSubscribers() { $this->initializedSubscribers = true; + + $eventListeners = $this->listeners; + // reset eventListener to respect priority: EventSubscribers have a higher priority + $this->listeners = []; foreach ($this->subscribers as $id => $subscriber) { if (\is_string($subscriber)) { parent::addEventSubscriber($this->subscribers[$id] = $this->container->get($subscriber)); } } + foreach ($eventListeners as $event => $listeners) { + if (!isset($this->listeners[$event])) { + $this->listeners[$event] = []; + } + $this->listeners[$event] += $listeners; + } + $this->subscribers = []; } /** diff --git a/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php b/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php index 01baa46dc9..e9d260ec26 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php @@ -146,11 +146,14 @@ class ContainerAwareEventManagerTest extends TestCase public function testGetListenersForEvent() { + $this->evm = new ContainerAwareEventManager($this->container, ['lazy2']); + $this->container->set('lazy', $listener1 = new MyListener()); + $this->container->set('lazy2', $subscriber1 = new MySubscriber(['foo'])); $this->evm->addEventListener('foo', 'lazy'); $this->evm->addEventListener('foo', $listener2 = new MyListener()); - $this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners('foo'))); + $this->assertSame([$subscriber1, $listener1, $listener2], array_values($this->evm->getListeners('foo'))); } public function testGetListeners()