Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fa568f1

Browse files
committed
serializer default context binded parameter
1 parent 6a9d1a3 commit fa568f1

File tree

10 files changed

+65
-11
lines changed

10 files changed

+65
-11
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,7 @@ private function addSerializerSection(ArrayNodeDefinition $rootNode)
826826
->arrayNode('default_context')
827827
->normalizeKeys(false)
828828
->useAttributeAsKey('name')
829-
->defaultValue(array())
829+
->defaultValue([])
830830
->prototype('variable')->end()
831831
->end()
832832
->end()

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,9 +1417,7 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
14171417
$container->getDefinition('serializer.normalizer.object')->addMethodCall('setMaxDepthHandler', [new Reference($config['max_depth_handler'])]);
14181418
}
14191419

1420-
if ($config['default_context'] ?? false) {
1421-
$container->getDefinition('serializer.normalizer.object')->setArgument('default_context', $config['default_context']);
1422-
}
1420+
$container->setParameter('serializer.default_context', $config['default_context'] ?? []);
14231421
}
14241422

14251423
private function registerPropertyInfoConfiguration(ContainerBuilder $container, XmlFileLoader $loader)

src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@
236236
<xsd:complexType name="serializer">
237237
<xsd:choice minOccurs="0" maxOccurs="unbounded">
238238
<xsd:element name="mapping" type="file_mapping" />
239-
<xsd:element name="default_context" type="metadata" minOccurs="0" maxOccurs="unbounded" />
239+
<xsd:element name="default-context" type="metadata" minOccurs="0" maxOccurs="1" />
240240
</xsd:choice>
241241
<xsd:attribute name="enabled" type="xsd:boolean" />
242242
<xsd:attribute name="cache" type="xsd:string" />

src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@
3232

3333
<!-- Normalizer -->
3434
<service id="serializer.normalizer.constraint_violation_list" class="Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer">
35+
<argument>%serializer.default_context%</argument>
3536
<!-- Run before serializer.normalizer.object -->
3637
<tag name="serializer.normalizer" priority="-915" />
3738
</service>
3839

3940
<service id="serializer.normalizer.dateinterval" class="Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer">
41+
<argument>%serializer.default_context%</argument>
4042
<!-- Run before serializer.normalizer.object -->
4143
<tag name="serializer.normalizer" priority="-915" />
4244
</service>
@@ -48,11 +50,15 @@
4850
</service>
4951

5052
<service id="serializer.normalizer.datetime" class="Symfony\Component\Serializer\Normalizer\DateTimeNormalizer">
53+
<argument>%serializer.default_context%</argument>
5154
<!-- Run before serializer.normalizer.object -->
5255
<tag name="serializer.normalizer" priority="-910" />
5356
</service>
5457

5558
<service id="serializer.normalizer.json_serializable" class="Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer">
59+
<argument>null</argument>
60+
<argument>null</argument>
61+
<argument>%serializer.default_context%</argument>
5662
<!-- Run before serializer.normalizer.object -->
5763
<tag name="serializer.normalizer" priority="-900" />
5864
</service>
@@ -63,6 +69,8 @@
6369
<argument type="service" id="serializer.property_accessor" />
6470
<argument type="service" id="property_info" on-invalid="ignore" />
6571
<argument type="service" id="serializer.mapping.class_discriminator_resolver" on-invalid="ignore" />
72+
<argument>null</argument>
73+
<argument>%serializer.default_context%</argument>
6674

6775
<!-- Run after all custom normalizers -->
6876
<tag name="serializer.normalizer" priority="-1000" />
@@ -102,6 +110,7 @@
102110

103111
<!-- Encoders -->
104112
<service id="serializer.encoder.xml" class="Symfony\Component\Serializer\Encoder\XmlEncoder">
113+
<argument>%serializer.default_context%</argument>
105114
<tag name="serializer.encoder" />
106115
</service>
107116

@@ -110,10 +119,14 @@
110119
</service>
111120

112121
<service id="serializer.encoder.yaml" class="Symfony\Component\Serializer\Encoder\YamlEncoder">
122+
<argument>null</argument>
123+
<argument>null</argument>
124+
<argument>%serializer.default_context%</argument>
113125
<tag name="serializer.encoder" />
114126
</service>
115127

116128
<service id="serializer.encoder.csv" class="Symfony\Component\Serializer\Encoder\CsvEncoder">
129+
<argument>%serializer.default_context%</argument>
117130
<tag name="serializer.encoder" />
118131
</service>
119132

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/full.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@
4242
<framework:validation enabled="true" />
4343
<framework:annotations cache="file" debug="true" file-cache-dir="%kernel.cache_dir%/annotations" />
4444
<framework:serializer enabled="true" enable-annotations="true" name-converter="serializer.name_converter.camel_case_to_snake_case" circular-reference-handler="my.circular.reference.handler" max-depth-handler="my.max.depth.handler">
45-
<framework:default_context>
45+
<framework:default-context>
4646
<framework:enable_max_depth>true</framework:enable_max_depth>
47-
</framework:default_context>
47+
</framework:default-context>
4848
</framework:serializer>
4949
<framework:property-info />
5050
</framework:config>

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1068,7 +1068,6 @@ public function testSerializerEnabled()
10681068
$this->assertEquals(new Reference('property_info', ContainerBuilder::IGNORE_ON_INVALID_REFERENCE), $container->getDefinition('serializer.normalizer.object')->getArgument(3));
10691069
$this->assertEquals(['setCircularReferenceHandler', [new Reference('my.circular.reference.handler')]], $container->getDefinition('serializer.normalizer.object')->getMethodCalls()[0]);
10701070
$this->assertEquals(['setMaxDepthHandler', [new Reference('my.max.depth.handler')]], $container->getDefinition('serializer.normalizer.object')->getMethodCalls()[1]);
1071-
$this->assertEquals(['enable_max_depth' => true], $container->getDefinition('serializer.normalizer.object')->getArgument('default_context'));
10721071
}
10731072

10741073
public function testRegisterSerializerExtractor()

src/Symfony/Component/Debug/Tests/Fixtures/FinalClasses.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class FinalClass3
3030

3131
/**
3232
* @final
33+
*
3334
* @author John Doe
3435
*/
3536
class FinalClass4
@@ -76,6 +77,7 @@ class FinalClass7
7677
/**
7778
* @author John Doe
7879
* @final
80+
*
7981
* @return string
8082
*/
8183
class FinalClass8

src/Symfony/Component/Debug/Tests/Fixtures/InterfaceWithAnnotatedParameters.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ interface InterfaceWithAnnotatedParameters
1313
public function whereAmI();
1414

1515
/**
16-
* @param $noType
16+
* @param $noType
1717
* @param callable(\Throwable|null $reason, mixed $value) $callback and a comment
18-
* about this great param
19-
* @param string $param (comment with $dollar)
18+
* about this great param
19+
* @param string $param (comment with $dollar)
2020
* @param $defined
2121
* @param callable ($a, $b) $anotherOne
2222
* @param callable (mixed $a, $b) $definedCallable

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,39 @@ public function process(ContainerBuilder $container)
5050

5151
$serializerDefinition = $container->getDefinition($this->serializerService);
5252
$serializerDefinition->replaceArgument(0, $normalizers);
53+
$this->addDefaultContextParameter($normalizers, $container);
5354

5455
if (!$encoders = $this->findAndSortTaggedServices($this->encoderTag, $container)) {
5556
throw new RuntimeException(sprintf('You must tag at least one service as "%s" to use the "%s" service.', $this->encoderTag, $this->serializerService));
5657
}
5758

5859
$serializerDefinition->replaceArgument(1, $encoders);
60+
$this->addDefaultContextParameter($encoders, $container);
61+
}
62+
63+
private function addDefaultContextParameter($services, $container)
64+
{
65+
foreach ($services as $service) {
66+
$definition = $container->getDefinition($service);
67+
if (!$definition->isAutowired()) {
68+
continue;
69+
}
70+
71+
if (null === $class = $definition->getClass()) {
72+
continue;
73+
}
74+
75+
$reflection = new \ReflectionClass($class);
76+
77+
if (null === $constructor = $reflection->getConstructor()) {
78+
continue;
79+
}
80+
81+
foreach ($constructor->getParameters() as $arg) {
82+
if ('defaultContext' === $arg->name) {
83+
$definition->setArgument('$defaultContext', '%serializer.default_context%');
84+
}
85+
}
86+
}
5987
}
6088
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\DependencyInjection\ContainerBuilder;
1616
use Symfony\Component\DependencyInjection\Reference;
1717
use Symfony\Component\Serializer\DependencyInjection\SerializerPass;
18+
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
1819

1920
/**
2021
* Tests for the SerializerPass class.
@@ -72,4 +73,17 @@ public function testServicesAreOrderedAccordingToPriority()
7273
$this->assertEquals($expected, $definition->getArgument(0));
7374
$this->assertEquals($expected, $definition->getArgument(1));
7475
}
76+
77+
public function testServiceHasDefaultContextParameterArgument()
78+
{
79+
$container = new ContainerBuilder();
80+
81+
$definition = $container->register('serializer')->setClass(ObjectNormalizer::class)->setArguments([null, null, null, null, null, null, null])->addTag('serializer.normalizer')->addTag('serializer.encoder');
82+
$definition->setAutowired(true);
83+
84+
$serializerPass = new SerializerPass();
85+
$serializerPass->process($container);
86+
87+
$this->assertEquals('%serializer.default_context%', $definition->getArgument('$defaultContext'));
88+
}
7589
}

0 commit comments

Comments
 (0)