8000 feature #14987 [FrameworkBundle] Configurable Serializer name convert… · symfony/symfony@f02a5dc · GitHub
[go: up one dir, main page]

Skip to content

Commit f02a5dc

Browse files
committed
feature #14987 [FrameworkBundle] Configurable Serializer name converter (dunglas)
This PR was merged into the 2.8 branch. Discussion ---------- [FrameworkBundle] Configurable Serializer name converter | Q | A | ------------- | --- | Bug fix? | no | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | n/a | License | MIT | Doc PR | symfony/symfony-docs#5483 - [x] Add tests Commits ------- e500a71 [FrameworkBundle] Configurable Serializer name converter
2 parents 0de8905 + e500a71 commit f02a5dc

File tree

8 files changed

+29
-4
lines changed

8 files changed

+29
-4
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,7 @@ private function addSerializerSection(ArrayNodeDefinition $rootNode)
660660
->children()
661661
->booleanNode('enable_annotations')->defaultFalse()->end()
662662
->scalarNode('cache')->end()
663+
->scalarNode('name_converter')->end()
663664
->end()
664665
->end()
665666
->end()

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,10 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
970970
1, new Reference($config['cache'])
971971
);
972972
}
973+
974+
if ($config['name_converter']) {
975+
$container->getDefinition('serializer.normalizer.object')->replaceArgument(1, new Reference($config['name_converter']));
976+
}
973977
}
974978

975979
/**

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,5 +217,6 @@
217217
<xsd:attribute name="enabled" type="xsd:boolean" />
218218
<xsd:attribute name="cache" type="xsd:string" />
219219
<xsd:attribute name="enable-annotations" type="xsd:boolean" />
220+
<xsd:attribute name="name-converter" type="xsd:string" />
220221
</xsd:complexType>
221222
</xsd:schema>

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<!-- Normalizer -->
2323
<service id="serializer.normalizer.object" class="Symfony\Component\Serializer\Normalizer\ObjectNormalizer" public="false">
2424
<argument type="service" id="serializer.mapping.class_metadata_factory" />
25-
<argument>null</argument>
25+
<argument>null</argument> <!-- name converter -->
2626
<argument type="service" id="serializer.property_accessor" />
2727

2828
<!-- Run after all custom serializers -->
@@ -55,5 +55,8 @@
5555
<service id="serializer.encoder.json" class="%serializer.encoder.json.class%" public="false">
5656
<tag name="serializer.encoder" />
5757
</service>
58+
59+
<!-- Name converter -->
60+
<service id="serializer.name_converter.camel_case_to_snake_case" class="Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter" public="false" />
5861
</services>
5962
</container>

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,12 @@
6161
'debug' => true,
6262
'file_cache_dir' => '%kernel.cache_dir%/annotations',
6363
),
64-
'serializer' => array('enabled' => true),
64+
'serializer' => array(
65+
'enabled' => true,
66+
'enable_annotations' => true,
67+
'cache' => 'serializer.mapping.cache.apc',
68+
'name_converter' => 'serializer.name_converter.camel_case_to_snake_case',
69+
),
6570
'ide' => 'file%%link%%format',
6671
'request' => array(
6772
'formats' => array(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@
3939
</framework:translator>
4040
<framework:validation enabled="true" cache="apc" />
4141
<framework:annotations cache="file" debug="true" file-cache-dir="%kernel.cache_dir%/annotations" />
42-
<framework:serializer enabled="true" />
42+
<framework:serializer enabled="true" enable-annotations="true" cache="serializer.mapping.cache.apc" name-converter="serializer.name_converter.camel_case_to_snake_case" />
4343
</framework:config>
4444
</container>

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ framework:
4747
cache: file
4848
debug: true
4949
file_cache_dir: %kernel.cache_dir%/annotations
50-
serializer: { enabled: true }
50+
serializer:
51+
enabled: true
52+
enable_annotations: true
53+
cache: serializer.mapping.cache.apc
54+
name_converter: serializer.name_converter.camel_case_to_snake_case
5155
ide: file%%link%%format
5256
request:
5357
formats:

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,13 @@ public function testSerializerEnabled()
446446
{
447447
$container = $this->createContainerFromFile('full');
448448
$this->assertTrue($container->has('serializer'));
449+
450+
$argument = $container->getDefinition('serializer.mapping.chain_loader')->getArgument(0);
451+
452+
$this->assertCount(1, $argument);
453+
$this->assertEquals('Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader', $argument[0]->getClass());
454+
$this->assertEquals(new Reference('serializer.mapping.cache.apc'), $container->getDefinition('serializer.mapping.class_metadata_factory')->getArgument(1));
455+
$this->assertEqu 4953 als(new Reference('serializer.name_converter.camel_case_to_snake_case'), $container->getDefinition('serializer.normalizer.object')->getArgument(1));
449456
}
450457

451458
public function testAssetHelperWhenAssetsAreEnabled()

0 commit comments

Comments
 (0)
0