Skip to content

Commit c1c6ee8

Browse files
committed
[Serializer] Fix ObjectNormalizer default context with named serializers
1 parent 3ded7c2 commit c1c6ee8

File tree

4 files changed

+18
-20
lines changed

4 files changed

+18
-20
lines changed

DependencyInjection/FrameworkExtension.php

+3-13
Original file line numberDiff line numberDiff line change
@@ -1946,24 +1946,14 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
19461946
$container->setParameter('serializer.default_context', $defaultContext);
19471947
}
19481948

1949-
if (!$container->hasDefinition('serializer.normalizer.object')) {
1950-
return;
1951-
}
1952-
1953-
$arguments = $container->getDefinition('serializer.normalizer.object')->getArguments();
1954-
$context = $arguments[6] ?? $defaultContext;
1955-
1956-
if (isset($config['circular_reference_handler']) && $config['circular_reference_handler']) {
1957-
$context += ['circular_reference_handler' => new Reference($config['circular_reference_handler'])];
1958-
$container->getDefinition('serializer.normalizer.object')->setArgument(5, null);
1949+
if ($config['circular_reference_handler'] ?? false) {
1950+
$container->setParameter('.serializer.circular_reference_handler', $config['circular_reference_handler']);
19591951
}
19601952

19611953
if ($config['max_depth_handler'] ?? false) {
1962-
$context += ['max_depth_handler' => new Reference($config['max_depth_handler'])];
1954+
$container->setParameter('.serializer.max_depth_handler', $config['max_depth_handler']);
19631955
}
19641956

1965-
$container->getDefinition('serializer.normalizer.object')->setArgument(6, $context);
1966-
19671957
$container->getDefinition('serializer.normalizer.property')->setArgument(5, $defaultContext);
19681958

19691959
$container->setParameter('.serializer.named_serializers', $config['named_serializers'] ?? []);

Resources/config/serializer.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@
129129
service('property_info')->ignoreOnInvalid(),
130130
service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
131131
null,
132-
null,
132+
abstract_arg('default context, set in the SerializerPass'),
133133
service('property_info')->ignoreOnInvalid(),
134134
])
135135
->tag('serializer.normalizer', ['built_in' => true, 'priority' => -1000])

Tests/DependencyInjection/FrameworkExtensionTestCase.php

+12-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
3434
use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
3535
use Symfony\Component\DependencyInjection\ChildDefinition;
36+
use Symfony\Component\DependencyInjection\Compiler\ResolveBindingsPass;
3637
use Symfony\Component\DependencyInjection\Compiler\ResolveChildDefinitionsPass;
3738
use Symfony\Component\DependencyInjection\Compiler\ResolveInstanceofConditionalsPass;
3839
use Symfony\Component\DependencyInjection\Compiler\ResolveTaggedIteratorArgumentPass;
@@ -67,6 +68,7 @@
6768
use Symfony\Component\Notifier\TexterInterface;
6869
use Symfony\Component\PropertyAccess\PropertyAccessor;
6970
use Symfony\Component\Security\Core\AuthenticationEvents;
71+
use Symfony\Component\Serializer\DependencyInjection\SerializerPass;
7072
use Symfony\Component\Serializer\Mapping\Loader\AttributeLoader;
7173
use Symfony\Component\Serializer\Mapping\Loader\XmlFileLoader;
7274
use Symfony\Component\Serializer\Mapping\Loader\YamlFileLoader;
@@ -1447,9 +1449,6 @@ public function testSerializerEnabled()
14471449
$this->assertEquals(AttributeLoader::class, $argument[0]->getClass());
14481450
$this->assertEquals(new Reference('serializer.name_converter.camel_case_to_snake_case'), $container->getDefinition('serializer.name_converter.metadata_aware')->getArgument(1));
14491451
$this->assertEquals(new Reference('property_info', ContainerBuilder::IGNORE_ON_INVALID_REFERENCE), $container->getDefinition('serializer.normalizer.object')->getArgument(3));
1450-
$this->assertArrayHasKey('circular_reference_handler', $container->getDefinition('serializer.normalizer.object')->getArgument(6));
1451-
$this->assertArrayHasKey('max_depth_handler', $container->getDefinition('serializer.normalizer.object')->getArgument(6));
1452-
$this->assertEquals($container->getDefinition('serializer.normalizer.object')->getArgument(6)['max_depth_handler'], new Reference('my.max.depth.handler'));
14531452
}
14541453

14551454
public function testSerializerWithoutTranslator()
@@ -1547,13 +1546,22 @@ public function testJsonSerializableNormalizerRegistered()
15471546

15481547
public function testObjectNormalizerRegistered()
15491548
{
1550-
$container = $this->createContainerFromFile('full');
1549+
$container = $this->createContainerFromFile('full', compile: false);
1550+
$container->addCompilerPass(new SerializerPass());
1551+
$container->addCompilerPass(new ResolveBindingsPass());
1552+
$container->compile();
15511553

15521554
$definition = $container->getDefinition('serializer.normalizer.object');
15531555
$tag = $definition->getTag('serializer.normalizer');
15541556

15551557
$this->assertEquals(ObjectNormalizer::class, $definition->getClass());
15561558
$this->assertEquals(-1000, $tag[0]['priority']);
1559+
1560+
$this->assertEquals([
1561+
'enable_max_depth' => true,
1562+
'circular_reference_handler' => new Reference('my.circular.reference.handler'),
1563+
'max_depth_handler' => new Reference('my.max.depth.handler'),
1564+
], $definition->getArgument(6));
15571565
}
15581566

15591567
public function testConstraintViolationListNormalizerRegistered()

composer.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
"symfony/scheduler": "^6.4.4|^7.0.4",
6060
"symfony/security-bundle": "^6.4|^7.0",
6161
"symfony/semaphore": "^6.4|^7.0",
62-
"symfony/serializer": "^7.1",
62+
"symfony/serializer": "^7.2.5",
6363
"symfony/stopwatch": "^6.4|^7.0",
6464
"symfony/string": "^6.4|^7.0",
6565
"symfony/translation": "^6.4|^7.0",
@@ -97,7 +97,7 @@
9797
"symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4",
9898
"symfony/security-csrf": "<7.2",
9999
"symfony/security-core": "<6.4",
100-
"symfony/serializer": "<7.1",
100+
"symfony/serializer": "<7.2.5",
101101
"symfony/stopwatch": "<6.4",
102102
"symfony/translation": "<6.4",
103103
"symfony/twig-bridge": "<6.4",

0 commit comments

Comments
 (0)