@@ -33,7 +33,7 @@ final class BroadcastListener implements ResetInterface
33
33
private $ annotationReader ;
34
34
35
35
/**
36
- * @var array<class-string, mixed[]|false >
36
+ * @var array<class-string, array[] >
37
37
*/
38
38
private $ broadcastedClasses ;
39
39
@@ -96,16 +96,23 @@ public function postFlush(EventArgs $eventArgs): void
96
96
try {
97
97
foreach ($ this ->createdEntities as $ entity ) {
98
98
$ options = $ this ->createdEntities [$ entity ];
99
- $ options ['id ' ] = $ em ->getClassMetadata (\get_class ($ entity ))->getIdentifierValues ($ entity );
100
- $ this ->broadcaster ->broadcast ($ entity , Broadcast::ACTION_CREATE , $ options );
99
+ $ id = $ em ->getClassMetadata (\get_class ($ entity ))->getIdentifierValues ($ entity );
100
+ foreach ($ options as $ option ) {
101
+ $ option ['id ' ] = $ id ;
102
+ $ this ->broadcaster ->broadcast ($ entity , Broadcast::ACTION_CREATE , $ option );
103
+ }
101
104
}
102
105
103
106
foreach ($ this ->updatedEntities as $ entity ) {
104
- $ this ->broadcaster ->broadcast ($ entity , Broadcast::ACTION_UPDATE , $ this ->updatedEntities [$ entity ]);
107
+ foreach ($ this ->updatedEntities [$ entity ] as $ option ) {
108
+ $ this ->broadcaster ->broadcast ($ entity , Broadcast::ACTION_UPDATE , $ option );
109
+ }
105
110
}
106
111
107
112
foreach ($ this ->removedEntities as $ entity ) {
108
- $ this ->broadcaster ->broadcast ($ entity , Broadcast::ACTION_REMOVE , $ this ->removedEntities [$ entity ]);
113
+ foreach ($ this ->removedEntities [$ entity ] as $ option ) {
114
+ $ this ->broadcaster ->broadcast ($ entity , Broadcast::ACTION_REMOVE , $ option );
115
+ }
109
116
}
110
117
} finally {
111
118
$ this ->reset ();
@@ -124,21 +131,30 @@ private function storeEntitiesToPublish(EntityManagerInterface $em, object $enti
124
131
$ class = \get_class ($ entity );
125
132
126
133
if (!isset ($ this ->broadcastedClasses [$ class ])) {
127
- $ this ->broadcastedClasses [$ class ] = false ;
134
+ $ this ->broadcastedClasses [$ class ] = [] ;
128
135
$ r = null ;
129
136
130
137
if (\PHP_VERSION_ID >= 80000 && $ options = ($ r = new \ReflectionClass ($ class ))->getAttributes (Broadcast::class)) {
131
- $ options = $ options [0 ]->newInstance ();
132
- $ this ->broadcastedClasses [$ class ] = $ options ->options ;
133
- } elseif ($ this ->annotationReader && $ options = $ this ->annotationReader ->getClassAnnotation ($ r ?? new \ReflectionClass ($ class ), Broadcast::class)) {
134
- $ this ->broadcastedClasses [$ class ] = $ options ->options ;
138
+ foreach ($ options as $ option ) {
139
+ $ this ->broadcastedClasses [$ class ][] = $ option ->newInstance ()->options ;
140
+ }
141
+ } elseif ($ this ->annotationReader && $ options = $ this ->annotationReader ->getClassAnnotations ($ r ?? new \ReflectionClass ($ class ))) {
142
+ foreach ($ options as $ option ) {
143
+ if ($ option instanceof Broadcast) {
144
+ $ this ->broadcastedClasses [$ class ][] = $ option ->options ;
145
+ }
146
+ }
135
147
}
136
148
}
137
149
138
- if (false !== $ options = $ this ->broadcastedClasses [$ class ]) {
150
+ if ($ options = $ this ->broadcastedClasses [$ class ]) {
139
151
if ('createdEntities ' !== $ property ) {
140
- $ options ['id ' ] = $ em ->getClassMetadata ($ class )->getIdentifierValues ($ entity );
152
+ $ id = $ em ->getClassMetadata ($ class )->getIdentifierValues ($ entity );
153
+ foreach ($ options as $ k => $ option ) {
154
+ $ options [$ k ]['id ' ] = $ id ;
155
+ }
141
156
}
157
+
142
158
$ this ->{$ property }->attach ($ entity , $ options );
143
159
}
144
160
}
0 commit comments