File tree 2 files changed +33
-3
lines changed
tests/Doctrine/Tests/ORM/Tools
2 files changed +33
-3
lines changed Original file line number Diff line number Diff line change 5
5
namespace Doctrine \ORM \Tools ;
6
6
7
7
use Doctrine \ORM \Event \LoadClassMetadataEventArgs ;
8
+ use Doctrine \ORM \Mapping \Builder \EntityListenerBuilder ;
8
9
9
10
use function ltrim ;
10
11
@@ -17,11 +18,11 @@ class AttachEntityListenersListener
17
18
private $ entityListeners = [];
18
19
19
20
/**
20
- * Adds a entity listener for a specific entity.
21
+ * Adds an entity listener for a specific entity.
21
22
*
22
23
* @param string $entityClass The entity to attach the listener.
23
24
* @param string $listenerClass The listener class.
24
- * @param string $eventName The entity lifecycle event.
25
+ * @param string|null $eventName The entity lifecycle event.
25
26
* @param string|null $listenerCallback The listener callback method or NULL to use $eventName.
26
27
*
27
28
* @return void
@@ -49,7 +50,11 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $event)
49
50
}
50
51
51
52
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
+ }
53
58
}
54
59
55
60
unset($ this ->entityListeners [$ metadata ->name ]);
Original file line number Diff line number Diff line change @@ -112,6 +112,31 @@ public function testDuplicateEntityListenerException(): void
112
112
113
113
$ this ->factory ->getMetadataFor (AttachEntityListenersListenerTestFooEntity::class);
114
114
}
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
+ }
115
140
}
116
141
117
142
/** @Entity */
You can’t perform that action at this time.
0 commit comments