File tree Expand file tree Collapse file tree 2 files changed +20
-5
lines changed
src/Symfony/Component/ErrorRenderer
Tests/DependencyInjection Expand file tree Collapse file tree 2 files changed +20
-5
lines changed Original file line number Diff line number Diff line change @@ -40,23 +40,22 @@ public function process(ContainerBuilder $container)
40
40
return ;
41
41
}
42
42
43
- $ renderers = $ registered = [];
43
+ $ renderers = [];
44
44
foreach ($ container ->findTaggedServiceIds ($ this ->rendererTag , true ) as $ serviceId => $ tags ) {
45
45
/** @var ErrorRendererInterface $class */
46
46
$ class = $ container ->getDefinition ($ serviceId )->getClass ();
47
47
48
48
foreach ($ tags as $ tag ) {
49
49
$ format = $ tag ['format ' ] ?? $ class ::getFormat ();
50
- if (! isset ( $ registered [ $ format ])) {
51
- $ priority = $ tag [ ' priority ' ] ?? 0 ;
50
+ $ priority = $ tag [ ' priority ' ] ?? 0 ;
51
+ if (! isset ( $ renderers [ $ priority][ $ format ])) {
52
52
$ renderers [$ priority ][$ format ] = new Reference ($ serviceId );
53
- $ registered [$ format ] = true ;
54
53
}
55
54
}
56
55
}
57
56
58
57
if ($ renderers ) {
59
- krsort ($ renderers );
58
+ ksort ($ renderers );
60
59
$ renderers = array_merge (...$ renderers );
61
60
}
62
61
Original file line number Diff line number Diff line change @@ -48,4 +48,20 @@ public function testProcess()
48
48
];
49
49
$ this ->assertEquals ($ expected , $ serviceLocatorDefinition ->getArgument (0 ));
50
50
}
51
+
52
+ public function testServicesAreOrderedAccordingToPriority ()
53
+ {
54
+ $ container = new ContainerBuilder ();
55
+ $ definition = $ container ->register ('error_renderer ' )->setArguments ([null ]);
56
+ $ container ->register ('r2 ' )->addTag ('error_renderer.renderer ' , ['format ' => 'json ' , 'priority ' => 100 ]);
57
+ $ container ->register ('r1 ' )->addTag ('error_renderer.renderer ' , ['format ' => 'json ' , 'priority ' => 200 ]);
58
+ $ container ->register ('r3 ' )->addTag ('error_renderer.renderer ' , ['format ' => 'json ' ]);
59
+ (new ErrorRendererPass ())->process ($ container );
60
+
61
+ $ expected = [
62
+ 'json ' => new ServiceClosureArgument (new Reference ('r1 ' )),
63
+ ];
64
+ $ serviceLocatorDefinition = $ container ->getDefinition ((string ) $ definition ->getArgument (0 ));
65
+ $ this ->assertEquals ($ expected , $ serviceLocatorDefinition ->getArgument (0 ));
66
+ }
51
67
}
You can’t perform that action at this time.
0 commit comments