55namespace Doctrine \ORM \Tools ;
66
77use Doctrine \ORM \Event \LoadClassMetadataEventArgs ;
8+ use Doctrine \ORM \Mapping \Builder \EntityListenerBuilder ;
89
910use function ltrim ;
1011
@@ -17,18 +18,18 @@ class AttachEntityListenersListener
1718 private array $ 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 public function addEntityListener (
2829 string $ entityClass ,
2930 string $ listenerClass ,
30- string $ eventName ,
31- $ listenerCallback = null ,
31+ string | null $ eventName = null ,
32+ string | null $ listenerCallback = null ,
3233 ): void {
3334 $ this ->entityListeners [ltrim ($ entityClass , '\\' )][] = [
3435 'event ' => $ eventName ,
@@ -49,7 +50,11 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $event): void
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 ]);
0 commit comments