Skip to content

Commit 1062cb2

Browse files
committed
Add a normalizer that support JsonSerializable objects
Handles circular references
1 parent b959370 commit 1062cb2

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Symfony\Component\Config\FileLocator;
2626
use Symfony\Component\Serializer\Normalizer\DataUriNormalizer;
2727
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
28+
use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
2829
use Symfony\Component\Validator\Validation;
2930

3031
/**
@@ -914,6 +915,13 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
914915
$definition->addTag('serializer.normalizer', array('priority' => -910));
915916
}
916917

918+
if (class_exists('Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer')) {
919+
// Run before serializer.normalizer.object
920+
$definition = $container->register('serializer.normalizer.json_serializable', JsonSerializableNormalizer::class);
921+
$definition->setPublic(false);
922+
$definition->addTag('serializer.normalizer', array('priority' => -900));
923+
}
924+
917925
$loader->load('serializer.xml');
918926
$chainLoader = $container->getDefinition('serializer.mapping.chain_loader');
919927

Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Symfony\Component\DependencyInjection\Reference;
2121
use Symfony\Component\Serializer\Normalizer\DataUriNormalizer;
2222
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
23+
use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
2324

2425
abstract class FrameworkExtensionTest extends TestCase
2526
{
@@ -485,6 +486,21 @@ public function testDateTimeNormalizerRegistered()
485486
$this->assertEquals(-910, $tag[0]['priority']);
486487
}
487488

489+
public function testJsonNormalizerRegistered()
490+
{
491+
if (!class_exists('Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer')) {
492+
$this->markTestSkipped('The JsonSerializableNormalizer has been introduced in the Serializer Component version 3.1.');
493+
}
494+
495+
$container = $this->createContainerFromFile('full');
496+
497+
$definition = $container->getDefinition('serializer.normalizer.json');
498+
$tag = $definition->getTag('serializer.normalizer');
499+
500+
$this->assertEquals(JsonSerializableNormalizer::class, $definition->getClass());
501+
$this->assertEquals(-900, $tag[0]['priority']);
502+
}
503+
488504
public function testAssetHelperWhenAssetsAreEnabled()
489505
{
490506
$container = $this->createContainerFromFile('full');

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"symfony/form": "~2.8|~3.0",
4747
"symfony/expression-language": "~2.8|~3.0",
4848
"symfony/process": "~2.8|~3.0",
49+
"symfony/serializer": "~2.8|^3.0",
4950
"symfony/validator": "~2.8|~3.0",
5051
"symfony/yaml": "~2.8|~3.0",
5152
"symfony/property-info": "~2.8|~3.0",

0 commit comments

Comments
 (0)