Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d56887f

Browse files
bug #40042 [Doctrine] Restore priority for EventSubscribers (jderusse)
This PR was merged into the 4.4 branch. Discussion ---------- [Doctrine] Restore priority for EventSubscribers | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | fix #40031 | License | MIT | Doc PR | - Since #39990, lazy subscribers are called AFTER listeners (which is the opposite of previous implementation). This PR restore the previous behavior. Note: ordered subscribers is implemented in #39978 but is considered as a new feature. Commits ------- 94eac1b Restore priority for eventSubscribers
2 parents a7abf0f + 94eac1b commit d56887f

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,22 @@ private function initializeListeners(string $eventName)
164164
private function initializeSubscribers()
165165
{
166166
$this->initializedSubscribers = true;
167+
168+
$eventListeners = $this->listeners;
169+
// reset eventListener to respect priority: EventSubscribers have a higher priority
170+
$this->listeners = [];
167171
foreach ($this->subscribers as $id => $subscriber) {
168172
if (\is_string($subscriber)) {
169173
parent::addEventSubscriber($this->subscribers[$id] = $this->container->get($subscriber));
170174
}
171175
}
176+
foreach ($eventListeners as $event => $listeners) {
177+
if (!isset($this->listeners[$event])) {
178+
$this->listeners[$event] = [];
179+
}
180+
$this->listeners[$event] += $listeners;
181+
}
182+
$this->subscribers = [];
172183
}
173184

174185
/**

src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,14 @@ public function testAddEventListenerAndSubscriberAfterDispatchEvent()
146146

147147
public function testGetListenersForEvent()
148148
{
149+
$this->evm = new ContainerAwareEventManager($this->container, ['lazy2']);
150+
149151
$this->container->set('lazy', $listener1 = new MyListener());
152+
$this->container->set('lazy2', $subscriber1 = new MySubscriber(['foo']));
150153
$this->evm->addEventListener('foo', 'lazy');
151154
$this->evm->addEventListener('foo', $listener2 = new MyListener());
152155

153-
$this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners('foo')));
156+
$this->assertSame([$subscriber1, $listener1, $listener2], array_values($this->evm->getListeners('foo')));
154157
}
155158

156159
public function testGetListeners()

0 commit comments

Comments
 (0)