From b16b5b9d86f7377d147cf7291bac0fc623c6de8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 11 Jan 2016 10:35:19 +0100 Subject: [PATCH] [Serializer] Allow to use proxies in object_to_populate --- .../Normalizer/AbstractNormalizer.php | 2 +- .../Serializer/Tests/Fixtures/ProxyDummy.php | 19 ++++++++++++ .../Tests/Fixtures/ToBeProxyfiedDummy.php | 30 +++++++++++++++++++ .../Normalizer/AbstractNormalizerTest.php | 14 +++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Component/Serializer/Tests/Fixtures/ProxyDummy.php create mode 100644 src/Symfony/Component/Serializer/Tests/Fixtures/ToBeProxyfiedDummy.php diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index 554f36c585..6db5bb91c4 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -296,7 +296,7 @@ abstract class AbstractNormalizer extends SerializerAwareNormalizer implements N if ( isset($context['object_to_populate']) && is_object($context['object_to_populate']) && - $class === get_class($context['object_to_populate']) + $context['object_to_populate'] instanceof $class ) { return $context['object_to_populate']; } diff --git a/src/Symfony/Component/Serializer/Tests/Fixtures/ProxyDummy.php b/src/Symfony/Component/Serializer/Tests/Fixtures/ProxyDummy.php new file mode 100644 index 0000000000..040d376d12 --- /dev/null +++ b/src/Symfony/Component/Serializer/Tests/Fixtures/ProxyDummy.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Tests\Fixtures; + +/** + * @author Kévin Dunglas + */ +class ProxyDummy extends ToBeProxyfiedDummy +{ +} diff --git a/src/Symfony/Component/Serializer/Tests/Fixtures/ToBeProxyfiedDummy.php b/src/Symfony/Component/Serializer/Tests/Fixtures/ToBeProxyfiedDummy.php new file mode 100644 index 0000000000..0279493b01 --- /dev/null +++ b/src/Symfony/Component/Serializer/Tests/Fixtures/ToBeProxyfiedDummy.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Tests\Fixtures; + +/** + * @author Kévin Dunglas + */ +class ToBeProxyfiedDummy +{ + private $foo; + + public function setFoo($foo) + { + $this->foo = $foo; + } + + public function getFoo() + { + return $this->foo; + } +} diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php index d27c8250aa..b317ec276f 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php @@ -5,7 +5,9 @@ namespace Symfony\Component\Serializer\Tests\Normalizer; use Symfony\Component\Serializer\Mapping\AttributeMetadata; use Symfony\Component\Serializer\Mapping\ClassMetadata; use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface; +use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Symfony\Component\Serializer\Tests\Fixtures\AbstractNormalizerDummy; +use Symfony\Component\Serializer\Tests\Fixtures\ProxyDummy; /** * Provides a dummy Normalizer which extends the AbstractNormalizer. @@ -88,4 +90,16 @@ class AbstractNormalizerTest extends \PHPUnit_Framework_TestCase $result = $this->normalizer->getAllowedAttributes('c', array('groups' => array('other')), false); $this->assertEquals(array($a3, $a4), $result); } + + public function testObjectToPopulateWithProxy() + { + $proxyDummy = new ProxyDummy(); + + $context = array('object_to_populate' => $proxyDummy); + + $normalizer = new ObjectNormalizer(); + $normalizer->denormalize(array('foo' => 'bar'), 'Symfony\Component\Serializer\Tests\Fixtures\ToBeProxyfiedDummy', null, $context); + + $this->assertSame('bar', $proxyDummy->getFoo()); + } }