Skip to content

Commit c828a38

Browse files
authored
Automap events in AttachEntityListenersListener (#10122)
1 parent cf91ce6 commit c828a38

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php

+8-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Doctrine\ORM\Tools;
66

77
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
8+
use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder;
89

910
use function ltrim;
1011

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

1920
/**
20-
* Adds a entity listener for a specific entity.
21+
* Adds an entity listener for a specific entity.
2122
*
2223
* @param string $entityClass The entity to attach the listener.
2324
* @param string $listenerClass The listener class.
24-
* @param string $eventName The entity lifecycle event.
25+
* @param string|null $eventName The entity lifecycle event.
2526
* @param string|null $listenerCallback The listener callback method or NULL to use $eventName.
2627
*
2728
* @return void
@@ -49,7 +50,11 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $event)
4950
}
5051

5152
foreach ($this->entityListeners[$metadata->name] as $listener) {
52-
$metadata->addEntityListener($listener['event'], $listener['class'], $listener['method']);
53+
if ($listener['event'] === null) {
54+
EntityListenerBuilder::bindEntityListener($metadata, $listener['class']);
55+
} else {
56+
$metadata->addEntityListener($listener['event'], $listener['class'], $listener['method']);
57+
}
5358
}
5459

5560
unset($this->entityListeners[$metadata->name]);

tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php

+25
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,31 @@ public function testDuplicateEntityListenerException(): void
112112

113113
$this->factory->getMetadataFor(AttachEntityListenersListenerTestFooEntity::class);
114114
}
115+
116+
public function testAttachWithoutSpecifyingAnEventName(): void
117+
{
118+
$this->listener->addEntityListener(
119+
AttachEntityListenersListenerTestFooEntity::class,
120+
AttachEntityListenersListenerTestListener::class,
121+
null
122+
);
123+
124+
$metadata = $this->factory->getMetadataFor(AttachEntityListenersListenerTestFooEntity::class);
125+
126+
self::assertCount(2, $metadata->entityListeners);
127+
128+
self::assertArrayHasKey('prePersist', $metadata->entityListeners);
129+
self::assertArrayHasKey('postPersist', $metadata->entityListeners);
130+
131+
self::assertCount(1, $metadata->entityListeners['prePersist']);
132+
self::assertCount(1, $metadata->entityListeners['postPersist']);
133+
134+
self::assertEquals('prePersist', $metadata->entityListeners['prePersist'][0]['method']);
135+
self::assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['prePersist'][0]['class']);
136+
137+
self::assertEquals('postPersist', $metadata->entityListeners['postPersist'][0]['method']);
138+
self::assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['postPersist'][0]['class']);
139+
}
115140
}
116141

117142
/** @Entity */

0 commit comments

Comments
 (0)