Skip to content

Commit

Permalink
Automap events in AttachEntityListenersListener (doctrine#10122)
Browse files Browse the repository at this point in the history
  • Loading branch information
HypeMC committed Oct 26, 2022
1 parent cf91ce6 commit c828a38
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
11 changes: 8 additions & 3 deletions lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php
Expand Up @@ -5,6 +5,7 @@
namespace Doctrine\ORM\Tools;

use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder;

use function ltrim;

Expand All @@ -17,11 +18,11 @@ class AttachEntityListenersListener
private $entityListeners = [];

/**
* Adds a entity listener for a specific entity.
* Adds an entity listener for a specific entity.
*
* @param string $entityClass The entity to attach the listener.
* @param string $listenerClass The listener class.
* @param string $eventName The entity lifecycle event.
* @param string|null $eventName The entity lifecycle event.
* @param string|null $listenerCallback The listener callback method or NULL to use $eventName.
*
* @return void
Expand Down Expand Up @@ -49,7 +50,11 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $event)
}

foreach ($this->entityListeners[$metadata->name] as $listener) {
$metadata->addEntityListener($listener['event'], $listener['class'], $listener['method']);
if ($listener['event'] === null) {
EntityListenerBuilder::bindEntityListener($metadata, $listener['class']);
} else {
$metadata->addEntityListener($listener['event'], $listener['class'], $listener['method']);
}
}

unset($this->entityListeners[$metadata->name]);
Expand Down
Expand Up @@ -112,6 +112,31 @@ public function testDuplicateEntityListenerException(): void

$this->factory->getMetadataFor(AttachEntityListenersListenerTestFooEntity::class);
}

public function testAttachWithoutSpecifyingAnEventName(): void
{
$this->listener->addEntityListener(
AttachEntityListenersListenerTestFooEntity::class,
AttachEntityListenersListenerTestListener::class,
null
);

$metadata = $this->factory->getMetadataFor(AttachEntityListenersListenerTestFooEntity::class);

self::assertCount(2, $metadata->entityListeners);

self::assertArrayHasKey('prePersist', $metadata->entityListeners);
self::assertArrayHasKey('postPersist', $metadata->entityListeners);

self::assertCount(1, $metadata->entityListeners['prePersist']);
self::assertCount(1, $metadata->entityListeners['postPersist']);

self::assertEquals('prePersist', $metadata->entityListeners['prePersist'][0]['method']);
self::assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['prePersist'][0]['class']);

self::assertEquals('postPersist', $metadata->entityListeners['postPersist'][0]['method']);
self::assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['postPersist'][0]['class']);
}
}

/** @Entity */
Expand Down

0 comments on commit c828a38

Please sign in to comment.