Skip to content

Commit

Permalink
Respect parent class contract in ContainerAwareDoctrineEventManager
Browse files Browse the repository at this point in the history
  • Loading branch information
Koc committed Apr 30, 2019
1 parent e197c9a commit 9d45fac
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 13 deletions.
51 changes: 38 additions & 13 deletions src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php
Expand Up @@ -43,24 +43,21 @@ public function __construct(ContainerInterface $container)
* the name of the method that is invoked on listeners.
* @param EventArgs $eventArgs The event arguments to pass to the event handlers/listeners.
* If not supplied, the single empty EventArgs instance is used.
*
* @return bool
*/
public function dispatchEvent($eventName, EventArgs $eventArgs = null)
{
if (isset($this->listeners[$eventName])) {
$eventArgs = null === $eventArgs ? EventArgs::getEmptyInstance() : $eventArgs;
if (!isset($this->listeners[$eventName])) {
return;
}

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

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

$listener->$eventName($eventArgs);
}
$this->initialized[$eventName] = true;
foreach ($this->listeners[$eventName] as $hash => $listener) {
$listener->$eventName($eventArgs);
}
}

Expand All @@ -73,7 +70,21 @@ public function dispatchEvent($eventName, EventArgs $eventArgs = null)
*/
public function getListeners($event = null)
{
return $event ? $this->listeners[$event] : $this->listeners;
if (null !== $event) {
if (!isset($this->initialized[$event])) {
$this->initializeListeners($event);
}

return $this->listeners[$event];
}

foreach (array_keys($this->listeners) as $event) {
if (!isset($this->initialized[$event])) {
$this->initializeListeners($event);
}
}

return $this->listeners;
}

/**
Expand Down Expand Up @@ -138,4 +149,18 @@ public function removeEventListener($events, $listener)
}
}
}

/**
* @param string $eventName
*/
private function initializeListeners($eventName)
{
foreach ($this->listeners[$eventName] as $hash => $listener) {
if (\is_string($listener)) {
$this->listeners[$eventName][$hash] = $this->container->get($listener);
}
}

$this->initialized[$eventName] = true;
}
}
Expand Up @@ -38,6 +38,24 @@ public function testDispatchEvent()
$this->assertTrue($listener2->called);
}

public function testGetListenersForEvent()
{
$this->container->set('foobar', $listener1 = new MyListener());
$this->evm->addEventListener('foo', 'foobar');
$this->evm->addEventListener('foo', $listener2 = new MyListener());

$this->assertSame([$listener1, $listener2], $this->evm->getListeners('foo'));
}

public function testGetListeners()
{
$this->container->set('foobar', $listener1 = new MyListener());
$this->evm->addEventListener('foo', 'foobar');
$this->evm->addEventListener('foo', $listener2 = new MyListener());

$this->assertSame(['foo' => [$listener1, $listener2]], $this->evm->getListeners());
}

public function testRemoveEventListener()
{
$this->evm->addEventListener('foo', 'bar');
Expand Down

0 comments on commit 9d45fac

Please sign in to comment.