From 5fd0f3f453a8c995b6c40c2015b3fc6fd72d232f Mon Sep 17 00:00:00 2001 From: Daniel Gorgan Date: Sun, 4 Nov 2018 02:29:33 +0200 Subject: [PATCH] [Serializer] Allow null values when denormalizing with constructor missing data --- .../Serializer/Normalizer/AbstractNormalizer.php | 2 +- .../Serializer/Tests/Normalizer/ObjectNormalizerTest.php | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index d5cdecab3e..542e5b9e11 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -378,7 +378,7 @@ abstract class AbstractNormalizer implements NormalizerInterface, DenormalizerIn // Don't run set for a parameter passed to the constructor $params[] = $parameterData; unset($data[$key]); - } elseif (isset($context[static::DEFAULT_CONSTRUCTOR_ARGUMENTS][$class][$key])) { + } elseif (array_key_exists($key, $context[static::DEFAULT_CONSTRUCTOR_ARGUMENTS][$class] ?? array())) { $params[] = $context[static::DEFAULT_CONSTRUCTOR_ARGUMENTS][$class][$key]; } elseif ($constructorParameter->isDefaultValueAvailable()) { $params[] = $constructorParameter->getDefaultValue(); diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index 860874a60e..35d1705d72 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -245,11 +245,11 @@ class ObjectNormalizerTest extends TestCase $result = $normalizer->denormalize($data, DummyValueObject::class, 'json', array( 'default_constructor_arguments' => array( - DummyValueObject::class => array('foo' => '', 'bar' => ''), + DummyValueObject::class => array('foo' => '', 'bar' => '', 'baz' => null), ), )); - $this->assertEquals(new DummyValueObject(10, ''), $result); + $this->assertEquals(new DummyValueObject(10, '', null), $result); } public function testGroupsNormalize() @@ -1117,11 +1117,13 @@ class DummyValueObject { private $foo; private $bar; + private $baz; - public function __construct($foo, $bar) + public function __construct($foo, $bar, $baz) { $this->foo = $foo; $this->bar = $bar; + $this->baz = $baz; } }