diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index dfd21b4644..5953ca86a2 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -59,8 +59,8 @@ abstract class AbstractNormalizer extends SerializerAwareNormalizer implements N /** * Sets the {@link ClassMetadataFactoryInterface} to use. * - * @param ClassMetadataFactoryInterface|null $classMetadataFactory - * @param NameConverterInterface|null $nameConverter + * @param ClassMetadataFactoryInterface|null $classMetadataFactory + * @param NameConverterInterface|null $nameConverter */ public function __construct(ClassMetadataFactoryInterface $classMetadataFactory = null, NameConverterInterface $nameConverter = null) { @@ -324,7 +324,7 @@ abstract class AbstractNormalizer extends SerializerAwareNormalizer implements N $allowed = $allowedAttributes === false || in_array($paramName, $allowedAttributes); $ignored = in_array($paramName, $this->ignoredAttributes); - if ($allowed && !$ignored && isset($data[$key])) { + if ($allowed && !$ignored && array_key_exists($key, $data)) { $params[] = $data[$key]; // don't run set for a parameter passed to the constructor unset($data[$key]); diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php index b4c82391d7..23cb497ead 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php @@ -193,6 +193,16 @@ class GetSetMethodNormalizerTest extends \PHPUnit_Framework_TestCase $this->assertTrue($obj->isBaz()); } + public function testConstructorDenormalizeWithNullArgument() + { + $obj = $this->normalizer->denormalize( + array('foo' => 'foo', 'bar' => null, 'baz' => true), + __NAMESPACE__.'\GetConstructorDummy', 'any'); + $this->assertEquals('foo', $obj->getFoo()); + $this->assertNull($obj->getBar()); + $this->assertTrue($obj->isBaz()); + } + public function testConstructorDenormalizeWithMissingOptionalArgument() { $obj = $this->normalizer->denormalize( diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index f07e79907f..6a41930eb0 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -137,6 +137,16 @@ class ObjectNormalizerTest extends \PHPUnit_Framework_TestCase $this->assertTrue($obj->isBaz()); } + public function testConstructorDenormalizeWithNullArgument() + { + $obj = $this->normalizer->denormalize( + array('foo' => 'foo', 'bar' => null, 'baz' => true), + __NAMESPACE__.'\ObjectConstructorDummy', 'any'); + $this->assertEquals('foo', $obj->getFoo()); + $this->assertNull($obj->bar); + $this->assertTrue($obj->isBaz()); + } + public function testConstructorDenormalizeWithMissingOptionalArgument() { $obj = $this->normalizer->denormalize( diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php index 714598f3d5..52ce54087c 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php @@ -151,6 +151,17 @@ class PropertyNormalizerTest extends \PHPUnit_Framework_TestCase $this->assertEquals('bar', $obj->getBar()); } + public function testConstructorDenormalizeWithNullArgument() + { + $obj = $this->normalizer->denormalize( + array('foo' => null, 'bar' => 'bar'), + __NAMESPACE__.'\PropertyConstructorDummy', ' + any' + ); + $this->assertNull($obj->getFoo()); + $this->assertEquals('bar', $obj->getBar()); + } + /** * @dataProvider provideCallbacks */