Skip to content

Commit 12fc94d

Browse files
Fix registering traceable voters, argument resolvers and normalizers
1 parent 6c28196 commit 12fc94d

File tree

6 files changed

+46
-55
lines changed

6 files changed

+46
-55
lines changed

src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddSecurityVotersPass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public function process(ContainerBuilder $container)
5656
}
5757

5858
if ($debug) {
59-
$voterServices[] = new Reference($debugVoterServiceId = 'debug.security.voter.'.$voterServiceId);
59+
$voterServices[] = new Reference($debugVoterServiceId = '.debug.security.voter.'.$voterServiceId);
6060

6161
$container
6262
->register($debugVoterServiceId, TraceableVoter::class)

src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSecurityVotersPassTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@ public function testThatVotersAreTraceableInDebugMode()
9191
$compilerPass = new AddSecurityVotersPass();
9292
$compilerPass->process($container);
9393

94-
$def1 = $container->getDefinition('debug.security.voter.voter1');
94+
$def1 = $container->getDefinition('.debug.security.voter.voter1');
9595
$this->assertNull($def1->getDecoratedService(), 'voter1: should not be decorated');
9696
$this->assertEquals(new Reference('voter1'), $def1->getArgument(0), 'voter1: wrong argument');
9797

98-
$def2 = $container->getDefinition('debug.security.voter.voter2');
98+
$def2 = $container->getDefinition('.debug.security.voter.voter2');
9999
$this->assertNull($def2->getDecoratedService(), 'voter2: should not be decorated');
100100
$this->assertEquals(new Reference('voter2'), $def2->getArgument(0), 'voter2: wrong argument');
101101

src/Symfony/Component/HttpKernel/DependencyInjection/ControllerArgumentValueResolverPass.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,30 +43,30 @@ public function process(ContainerBuilder $container)
4343
$namedResolvers = $this->findAndSortTaggedServices(new TaggedIteratorArgument('controller.targeted_value_resolver', 'name', needsIndexes: true), $container);
4444
$resolvers = $this->findAndSortTaggedServices(new TaggedIteratorArgument('controller.argument_value_resolver', 'name', needsIndexes: true), $container);
4545

46-
foreach ($resolvers as $name => $resolverReference) {
47-
$id = (string) $resolverReference;
48-
49-
if ($definitions[$id]->hasTag('controller.targeted_value_resolver')) {
46+
foreach ($resolvers as $name => $resolver) {
47+
if ($definitions[(string) $resolver]->hasTag('controller.targeted_value_resolver')) {
5048
unset($resolvers[$name]);
5149
} else {
52-
$namedResolvers[$name] ??= clone $resolverReference;
50+
$namedResolvers[$name] ??= clone $resolver;
5351
}
5452
}
5553

56-
$resolvers = array_values($resolvers);
57-
5854
if ($container->getParameter('kernel.debug') && class_exists(Stopwatch::class) && $container->has('debug.stopwatch')) {
59-
foreach ($resolvers + $namedResolvers as $resolverReference) {
60-
$id = (string) $resolverReference;
61-
$container->register("debug.$id", TraceableValueResolver::class)
62-
->setDecoratedService($id)
63-
->setArguments([new Reference("debug.$id.inner"), new Reference('debug.stopwatch')]);
55+
foreach ($resolvers as $name => $resolver) {
56+
$resolvers[$name] = new Reference('.debug.value_resolver.'.$resolver);
57+
$container->register('.debug.value_resolver.'.$resolver, TraceableValueResolver::class)
58+
->setArguments([$resolver, new Reference('debug.stopwatch')]);
59+
}
60+
foreach ($namedResolvers as $name => $resolver) {
61+
$namedResolvers[$name] = new Reference('.debug.value_resolver.'.$resolver);
62+
$container->register('.debug.value_resolver.'.$resolver, TraceableValueResolver::class)
63+
->setArguments([$resolver, new Reference('debug.stopwatch')]);
6464
}
6565
}
6666

6767
$container
6868
->getDefinition('argument_resolver')
69-
->replaceArgument(1, new IteratorArgument($resolvers))
69+
->replaceArgument(1, new IteratorArgument(array_values($resolvers)))
7070
->setArgument(2, new ServiceLocatorArgument($namedResolvers))
7171
;
7272
}

src/Symfony/Component/HttpKernel/Tests/DependencyInjection/ControllerArgumentValueResolverPassTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ public function testInDebugWithStopWatchDefinition()
6262
];
6363

6464
$expected = [
65-
new Reference('n1'),
66-
new Reference('n2'),
67-
new Reference('n3'),
65+
new Reference('.debug.value_resolver.n1'),
66+
new Reference('.debug.value_resolver.n2'),
67+
new Reference('.debug.value_resolver.n3'),
6868
];
6969

7070
$definition = new Definition(ArgumentResolver::class, [null, []]);
@@ -81,9 +81,9 @@ public function testInDebugWithStopWatchDefinition()
8181
(new ControllerArgumentValueResolverPass())->process($container);
8282
$this->assertEquals($expected, $definition->getArgument(1)->getValues());
8383

84-
$this->assertTrue($container->hasDefinition('debug.n1'));
85-
$this->assertTrue($container->hasDefinition('debug.n2'));
86-
$this->assertTrue($container->hasDefinition('debug.n3'));
84+
$this->assertTrue($container->hasDefinition('.debug.value_resolver.n1'));
85+
$this->assertTrue($container->hasDefinition('.debug.value_resolver.n2'));
86+
$this->assertTrue($container->hasDefinition('.debug.value_resolver.n3'));
8787

8888
$this->assertTrue($container->hasDefinition('n1'));
8989
$this->assertTrue($container->hasDefinition('n2'));

src/Symfony/Component/Serializer/DependencyInjection/SerializerPass.php

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -40,45 +40,38 @@ public function process(ContainerBuilder $container)
4040
return;
4141
}
4242

43-
if (!$normalizers = $container->findTaggedServiceIds('serializer.normalizer')) {
43+
if (!$normalizers = $this->findAndSortTaggedServices('serializer.normalizer', $container)) {
4444
throw new RuntimeException('You must tag at least one service as "serializer.normalizer" to use the "serializer" service.');
4545
}
4646

47-
if ($container->getParameter('kernel.debug') && $container->hasDefinition('serializer.data_collector')) {
48-
foreach (array_keys($normalizers) as $normalizer) {
49-
$container->register('debug.'.$normalizer, TraceableNormalizer::class)
50-
->setDecoratedService($normalizer)
51-
->setArguments([new Reference('debug.'.$normalizer.'.inner'), new Reference('serializer.data_collector')]);
52-
}
47+
if (!$encoders = $this->findAndSortTaggedServices('serializer.encoder', $container)) {
48+
throw new RuntimeException('You must tag at least one service as "serializer.encoder" to use the "serializer" service.');
5349
}
5450

55-
$serializerDefinition = $container->getDefinition('serializer');
56-
$serializerDefinition->replaceArgument(0, $this->findAndSortTaggedServices('serializer.normalizer', $container));
51+
if ($container->hasParameter('serializer.default_context')) {
52+
$defaultContext = $container->getParameter('serializer.default_context');
53+
foreach (array_merge($normalizers, $encoders) as $service) {
54+
$definition = $container->getDefinition($service);
55+
$definition->setBindings(['array $defaultContext' => new BoundArgument($defaultContext, false)] + $definition->getBindings());
56+
}
5757

58-
if (!$encoders = $container->findTaggedServiceIds('serializer.encoder')) {
59-
throw new RuntimeException('You must tag at least one service as "serializer.encoder" to use the "serializer" service.');
58+
$container->getParameterBag()->remove('serializer.default_context');
6059
}
6160

6261
if ($container->getParameter('kernel.debug') && $container->hasDefinition('serializer.data_collector')) {
63-
foreach (array_keys($encoders) as $encoder) {
64-
$container->register('debug.'.$encoder, TraceableEncoder::class)
65-
->setDecoratedService($encoder)
66-
->setArguments([new Reference('debug.'.$encoder.'.inner'), new Reference('serializer.data_collector')]);
62+
foreach ($normalizers as $i => $normalizer) {
63+
$normalizers[$i] = $container->register('.debug.serializer.normalizer.'.$normalizer, TraceableNormalizer::class)
64+
->setArguments([$normalizer, new Reference('serializer.data_collector')]);
6765
}
68-
}
6966

70-
$serializerDefinition->replaceArgument(1, $this->findAndSortTaggedServices('serializer.encoder', $container));
71-
72-
if (!$container->hasParameter('serializer.default_context')) {
73-
return;
74-
}
75-
76-
$defaultContext = $container->getParameter('serializer.default_context');
77-
foreach (array_keys(array_merge($container->findTaggedServiceIds('serializer.normalizer'), $container->findTaggedServiceIds('serializer.encoder'))) as $service) {
78-
$definition = $container->getDefinition($service);
79-
$definition->setBindings(['array $defaultContext' => new BoundArgument($defaultContext, false)] + $definition->getBindings());
67+
foreach ($encoders as $i => $encoder) {
68+
$encoders[$i] = $container->register('.debug.serializer.encoder.'.$encoder, TraceableEncoder::class)
69+
->setArguments([$encoder, new Reference('serializer.data_collector')]);
70+
}
8071
}
8172

82-
$container->getParameterBag()->remove('serializer.default_context');
73+
$serializerDefinition = $container->getDefinition('serializer');
74+
$serializerDefinition->replaceArgument(0, $normalizers);
75+
$serializerDefinition->replaceArgument(1, $encoders);
8376
}
8477
}

src/Symfony/Component/Serializer/Tests/DependencyInjection/SerializerPassTest.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,15 @@ public function testNormalizersAndEncodersAreDecoredAndOrderedWhenCollectingData
104104
$serializerPass = new SerializerPass();
105105
$serializerPass->process($container);
106106

107-
$traceableNormalizerDefinition = $container->getDefinition('debug.n');
108-
$traceableEncoderDefinition = $container->getDefinition('debug.e');
107+
$traceableNormalizerDefinition = $container->getDefinition('.debug.serializer.normalizer.n');
108+
$traceableEncoderDefinition = $container->getDefinition('.debug.serializer.encoder.e');
109109

110110
$this->assertEquals(TraceableNormalizer::class, $traceableNormalizerDefinition->getClass());
111-
$this->assertEquals(['n', null, 0], $traceableNormalizerDefinition->getDecoratedService());
112-
$this->assertEquals(new Reference('debug.n.inner'), $traceableNormalizerDefinition->getArgument(0));
111+
$this->assertEquals(new Reference('n'), $traceableNormalizerDefinition->getArgument(0));
113112
$this->assertEquals(new Reference('serializer.data_collector'), $traceableNormalizerDefinition->getArgument(1));
114113

115114
$this->assertEquals(TraceableEncoder::class, $traceableEncoderDefinition->getClass());
116-
$this->assertEquals(['e', null, 0], $traceableEncoderDefinition->getDecoratedService());
117-
$this->assertEquals(new Reference('debug.e.inner'), $traceableEncoderDefinition->getArgument(0));
115+
$this->assertEquals(new Reference('e'), $traceableEncoderDefinition->getArgument(0));
118116
$this->assertEquals(new Reference('serializer.data_collector'), $traceableEncoderDefinition->getArgument(1));
119117
}
120118
}

0 commit comments

Comments
 (0)