8000 Respect parent class contract in ContainerAwareDoctrineEventManager · symfony/symfony@9d45fac · GitHub
[go: up one dir, main page]

Skip to content

Commit 9d45fac

Browse files
committed
Respect parent class contract in ContainerAwareDoctrineEventManager
1 parent e197c9a commit 9d45fac

File tree

2 files changed

+56
-13
lines changed

2 files changed

+56
-13
lines changed

src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php

Lines changed: 38 additions & 13 deletions
< 10000 td data-grid-cell-id="diff-d39e0f51c3ab2f7f245b3138dbe75bbad8537dc48d817acf062c7680a733c6bd-140-156-0" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-additionNum-bgColor, var(--diffBlob-addition-bgColor-num));text-align:center" tabindex="-1" valign="top" class="focusable-grid-cell diff-line-number position-relative left-side">
Original file line numberDiff line numberDiff line change
@@ -43,24 +43,21 @@ public function __construct(ContainerInterface $container)
4343
* the name of the method that is invoked on listeners.
4444
* @param EventArgs $eventArgs The event arguments to pass to the event handlers/listeners.
4545
* If not supplied, the single empty EventArgs instance is used.
46-
*
47-
* @return bool
4846
*/
4947
public function dispatchEvent($eventName, EventArgs $eventArgs = null)
5048
{
51-
if (isset($this->listeners[$eventName])) {
52-
$eventArgs = null === $eventArgs ? EventArgs::getEmptyInstance() : $eventArgs;
49+
if (!isset($this->listeners[$eventName])) {
50+
return;
51+
}
5352

54-
$initialized = isset($this->initialized[$eventName]);
53+
$eventArgs = null === $eventArgs ? EventArgs::getEmptyInstance() : $eventArgs;
5554

56-
foreach ($this->listeners[$eventName] as $hash => $listener) {
57-
if (!$initialized && \is_string($listener)) {
58-
$this->listeners[$eventName][$hash] = $listener = $this->container->get($listener);
59-
}
55+
if (!isset($this->initialized[$eventName])) {
56+
$this->initializeListeners($eventName);
57+
}
6058

61-
$listener->$eventName($eventArgs);
62-
}
63-
$this->initialized[$eventName] = true;
59+
foreach ($this->listeners[$eventName] as $hash => $listener) {
60+
$listener->$eventName($eventArgs);
6461
}
6562
}
6663

@@ -73,7 +70,21 @@ public function dispatchEvent($eventName, EventArgs $eventArgs = null)
7370
*/
7471
public function getListeners($event = null)
7572
{
76-
return $event ? $this->listeners[$event] : $this->listeners;
73+
if (null !== $event) {
74+
if (!isset($this->initialized[$event])) {
75+
$this->initializeListeners($event);
76+
}
77+
78+
return $this->listeners[$event];
79+
}
80+
81+
foreach (array_keys($this->listeners) as $event) {
82+
if (!isset($this->initialized[$event])) {
83+
$this->initializeListeners($event);
84+
}
85+
}
86+
87+
return $this->listeners;
7788
}
7889

7990
/**
@@ -138,4 +149,18 @@ public function removeEventListener($events, $listener)
138149
}
139150
}
140151
}
152+
153+
/**
154+
* @param string $eventName
155+
*/
156+
private function initializeListeners($eventName)
157+
{
158+
foreach ($this->listeners[$eventName] as $hash => $listener) {
159+
if (\is_string($listener)) {
160+
$this->listeners[$eventName][$hash] = $this->container->get($listener);
161+
}
162+
}
163+
164+
$this->initialized[$eventName] = true;
165+
}
141166
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,24 @@ public function testDispatchEvent()
3838
$this->assertTrue($listener2->called);
3939
}
4040

41+
public function testGetListenersForEvent()
42+
{
43+
$this->container->set('foobar', $listener1 = new MyListener());
44+
$this->evm->addEventListener('foo', 'foobar');
45+
$this->evm->addEventListener('foo', $listener2 = new MyListener());
46+
47+
$this->assertSame([$listener1, $listener2], $this->evm->getListeners('foo'));
48+
}
49+
50+
public function testGetListeners()
51+
{
52+
$this->container->set('foobar', $listener1 = new MyListener());
53+
$this->evm->addEventListener('foo', 'foobar');
54+
$this->evm->addEventListener('foo', $listener2 = new MyListener());
55+
56+
$this->assertSame(['foo' => [$listener1, $listener2]], $this->evm->getListeners());
57+
}
58+
4159
public function testRemoveEventListener()
4260
{
4361
$this->evm->addEventListener('foo', 'bar');

0 commit comments

Comments
 (0)
0