Skip to content

Commit e500a71

Browse files
committed
[FrameworkBundle] Configurable Serializer name converter
1 parent 86e77eb commit e500a71

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