Restore priority for eventSubscribers
This commit is contained in:
parent
945c7c590c
commit
94eac1b83f
@ -164,11 +164,22 @@ class ContainerAwareEventManager extends EventManager
|
|||||||
private function initializeSubscribers()
|
private function initializeSubscribers()
|
||||||
{
|
{
|
||||||
$this->initializedSubscribers = true;
|
$this->initializedSubscribers = true;
|
||||||
|
|
||||||
|
$eventListeners = $this->listeners;
|
||||||
|
// reset eventListener to respect priority: EventSubscribers have a higher priority
|
||||||
|
$this->listeners = [];
|
||||||
foreach ($this->subscribers as $id => $subscriber) {
|
foreach ($this->subscribers as $id => $subscriber) {
|
||||||
if (\is_string($subscriber)) {
|
if (\is_string($subscriber)) {
|
||||||
parent::addEventSubscriber($this->subscribers[$id] = $this->container->get($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 = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -146,11 +146,14 @@ class ContainerAwareEventManagerTest extends TestCase
|
|||||||
|
|
||||||
public function testGetListenersForEvent()
|
public function testGetListenersForEvent()
|
||||||
{
|
{
|
||||||
|
$this->evm = new ContainerAwareEventManager($this->container, ['lazy2']);
|
||||||
|
|
||||||
$this->container->set('lazy', $listener1 = new MyListener());
|
$this->container->set('lazy', $listener1 = new MyListener());
|
||||||
|
$this->container->set('lazy2', $subscriber1 = new MySubscriber(['foo']));
|
||||||
$this->evm->addEventListener('foo', 'lazy');
|
$this->evm->addEventListener('foo', 'lazy');
|
||||||
$this->evm->addEventListener('foo', $listener2 = new MyListener());
|
$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()
|
public function testGetListeners()
|
||||||
|
Reference in New Issue
Block a user