Skip to content

Commit a5f8bb2

Browse files
bug #47637 [FrameworkBundle] Fix passing serializer.default_context option to normalizers (wuchen90)
This PR was merged into the 5.4 branch. Discussion ---------- [FrameworkBundle] Fix passing `serializer.default_context` option to normalizers | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no <!-- please update src/**/CHANGELOG.md files --> | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | License | MIT The `default_context` config option under `serializer` of FrameworkBundle isn't taken into account when using `Symfony\Component\Serializer\Normalizer\ObjectNormalizer`. Maybe it's the case for other serializers but let's fix one at a time. Commits ------- d863692 [FrameworkBundle] Fix passing `serializer.default_context` option to normalizers
2 parents fd81357 + d863692 commit a5f8bb2

File tree

3 files changed

+82
-3
lines changed

3 files changed

+82
-3
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@
7878

7979
// Normalizer
8080
->set('serializer.normalizer.constraint_violation_list', ConstraintViolationListNormalizer::class)
81-
->args([[], service('serializer.name_converter.metadata_aware')])
81+
->args([1 => service('serializer.name_converter.metadata_aware')])
82+
->autowire(true)
8283
->tag('serializer.normalizer', ['priority' => -915])
8384

8485
->set('serializer.normalizer.mime_message', MimeMessageNormalizer::class)
@@ -124,7 +125,6 @@
124125
service('property_info')->ignoreOnInvalid(),
125126
service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
126127
null,
127-
[],
128128
])
129129
->tag('serializer.normalizer', ['priority' => -1000])
130130

@@ -137,7 +137,6 @@
137137
service('property_info')->ignoreOnInvalid(),
138138
service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
139139
null,
140-
[],
141140
])
142141

143142
->alias(PropertyNormalizer::class, 'serializer.normalizer.property')

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/SerializerTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,41 @@ public function testDeserializeArrayOfObject()
3232

3333
$this->assertEquals($expected, $result);
3434
}
35+
36+
/**
37+
* @dataProvider provideNormalizersAndEncodersWithDefaultContextOption
38+
*/
39+
public function testNormalizersAndEncodersUseDefaultContextConfigOption(string $normalizerId)
40+
{
41+
static::bootKernel(['test_case' => 'Serializer']);
42+
43+
$normalizer = static::getContainer()->get($normalizerId);
44+
45+
$reflectionObject = new \ReflectionObject($normalizer);
46+
$property = $reflectionObject->getProperty('defaultContext');
47+
$property->setAccessible(true);
48+
49+
$defaultContext = $property->getValue($normalizer);
50+
51+
self::assertArrayHasKey('fake_context_option', $defaultContext);
52+
self::assertEquals('foo', $defaultContext['fake_context_option']);
53+
}
54+
55+
public function provideNormalizersAndEncodersWithDefaultContextOption(): array
56+
{
57+
return [
58+
['serializer.normalizer.constraint_violation_list.alias'],
59+
['serializer.normalizer.dateinterval.alias'],
60+
['serializer.normalizer.datetime.alias'],
61+
['serializer.normalizer.json_serializable.alias'],
62+
['serializer.normalizer.problem.alias'],
63+
['serializer.normalizer.uid.alias'],
64+
['serializer.normalizer.object.alias'],
65+
['serializer.encoder.xml.alias'],
66+
['serializer.encoder.yaml.alias'],
67+
['serializer.encoder.csv.alias'],
68+
];
69+
}
3570
}
3671

3772
class Foo

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/config.yml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,54 @@ framework:
66
enabled: true
77
default_context:
88
enable_max_depth: true
9+
fake_context_option: foo
910
property_info: { enabled: true }
1011

1112
services:
1213
serializer.alias:
1314
alias: serializer
1415
public: true
16+
17+
serializer.normalizer.constraint_violation_list.alias:
18+
alias: serializer.normalizer.constraint_violation_list
19+
public: true
20+
21+
serializer.normalizer.dateinterval.alias:
22+
alias: serializer.normalizer.dateinterval
23+
public: true
24+
25+
serializer.normalizer.datetime.alias:
26+
alias: serializer.normalizer.datetime
27+
public: true
28+
29+
serializer.normalizer.json_serializable.alias:
30+
alias: serializer.normalizer.json_serializable
31+
public: true
32+
33+
serializer.normalizer.problem.alias:
34+
alias: serializer.normalizer.problem
35+
public: true
36+
37+
serializer.normalizer.uid.alias:
38+
alias: serializer.normalizer.uid
39+
public: true
40+
41+
serializer.normalizer.property.alias:
42+
alias: serializer.normalizer.property
43+
public: true
44+
45+
serializer.normalizer.object.alias:
46+
alias: serializer.normalizer.object
47+
public: true
48+
49+
serializer.encoder.xml.alias:
50+
alias: serializer.encoder.xml
51+
public: true
52+
53+
serializer.encoder.yaml.alias:
54+
alias: serializer.encoder.yaml
55+
public: true
56+
57+
serializer.encoder.csv.alias:
58+
alias: serializer.encoder.csv
59+
public: true

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy