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->assertEquals(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)
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