66use Symfony \Component \DependencyInjection \ChildDefinition ;
77use Symfony \Component \DependencyInjection \Compiler \CompilerPassInterface ;
88use Symfony \Component \DependencyInjection \ContainerBuilder ;
9+ use Symfony \Component \DependencyInjection \Reference ;
910
1011use function array_key_exists ;
1112use function array_keys ;
@@ -44,20 +45,21 @@ public function process(ContainerBuilder $container): void
4445 }
4546
4647 foreach (array_keys ($ container ->getParameter ('doctrine.connections ' )) as $ name ) {
47- $ middlewareDefs = [];
48+ $ middlewareRefs = [];
4849 $ i = 0 ;
4950 foreach ($ middlewareAbstractDefs as $ id => $ abstractDef ) {
5051 if (isset ($ middlewareConnections [$ id ]) && ! array_key_exists ($ name , $ middlewareConnections [$ id ])) {
5152 continue ;
5253 }
5354
54- $ middlewareDefs [$ id ] = [
55- $ childDef = $ container ->setDefinition (
56- sprintf ('%s.%s ' , $ id , $ name ),
57- new ChildDefinition ($ id ),
58- ),
59- ++$ i ,
60- ];
55+ $ childDef = $ container ->setDefinition (
56+ $ childId = sprintf ('%s.%s ' , $ id , $ name ),
57+ (new ChildDefinition ($ id ))
58+ ->setTags ($ abstractDef ->getTags ())->clearTag ('doctrine.middleware ' )
59+ ->setAutoconfigured ($ abstractDef ->isAutoconfigured ())
60+ ->setAutowired ($ abstractDef ->isAutowired ()),
61+ );
62+ $ middlewareRefs [$ id ] = [new Reference ($ childId ), ++$ i ];
6163
6264 if (! is_subclass_of ($ abstractDef ->getClass (), ConnectionNameAwareInterface::class)) {
6365 continue ;
@@ -66,21 +68,21 @@ public function process(ContainerBuilder $container): void
6668 $ childDef ->addMethodCall ('setConnectionName ' , [$ name ]);
6769 }
6870
69- $ middlewareDefs = array_map (
70- static fn ($ id , $ def ) => [
71+ $ middlewareRefs = array_map (
72+ static fn (string $ id , array $ ref ) => [
7173 $ middlewareConnections [$ id ][$ name ] ?? $ middlewarePriorities [$ id ] ?? 0 ,
72- $ def [1 ],
73- $ def [0 ],
74+ $ ref [1 ],
75+ $ ref [0 ],
7476 ],
75- array_keys ($ middlewareDefs ),
76- array_values ($ middlewareDefs ),
77+ array_keys ($ middlewareRefs ),
78+ array_values ($ middlewareRefs ),
7779 );
78- uasort ($ middlewareDefs , static fn ($ a , $ b ) => $ b [0 ] <=> $ a [0 ] ?: $ a [1 ] <=> $ b [1 ]);
79- $ middlewareDefs = array_map (static fn ($ value ) => $ value [2 ], $ middlewareDefs );
80+ uasort ($ middlewareRefs , static fn (array $ a , array $ b ): int => $ b [0 ] <=> $ a [0 ] ?: $ a [1 ] <=> $ b [1 ]);
81+ $ middlewareRefs = array_map (static fn (array $ value ): Reference => $ value [2 ], $ middlewareRefs );
8082
8183 $ container
8284 ->getDefinition (sprintf ('doctrine.dbal.%s_connection.configuration ' , $ name ))
83- ->addMethodCall ('setMiddlewares ' , [$ middlewareDefs ]);
85+ ->addMethodCall ('setMiddlewares ' , [$ middlewareRefs ]);
8486 }
8587 }
8688}
0 commit comments