diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index 69cbc54bed531..5eedac7253b8c 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -17,14 +17,18 @@ use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface; use Symfony\Component\Serializer\Mapping\AttributeMetadataInterface; use Symfony\Component\Serializer\NameConverter\NameConverterInterface; +use Symfony\Component\Serializer\SerializerAwareInterface; +use Symfony\Component\Serializer\SerializerAwareTrait; /** * Normalizer implementation. * * @author Kévin Dunglas */ -abstract class AbstractNormalizer extends SerializerAwareNormalizer implements NormalizerInterface, DenormalizerInterface +abstract class AbstractNormalizer implements NormalizerInterface, DenormalizerInterface, SerializerAwareInterface { + use SerializerAwareTrait; + const CIRCULAR_REFERENCE_LIMIT = 'circular_reference_limit'; const OBJECT_TO_POPULATE = 'object_to_populate'; const GROUPS = 'groups'; diff --git a/src/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php index be8b7d5fd747d..f90ee866627aa 100644 --- a/src/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php @@ -11,11 +11,16 @@ namespace Symfony\Component\Serializer\Normalizer; +use Symfony\Component\Serializer\SerializerAwareInterface; +use Symfony\Component\Serializer\SerializerAwareTrait; + /** * @author Jordi Boggiano */ -class CustomNormalizer extends SerializerAwareNormalizer implements NormalizerInterface, DenormalizerInterface +class CustomNormalizer implements NormalizerInterface, DenormalizerInterface, SerializerAwareInterface { + use SerializerAwareTrait; + /** * {@inheritdoc} */ diff --git a/src/Symfony/Component/Serializer/Normalizer/DenormalizerAwareInterface.php b/src/Symfony/Component/Serializer/Normalizer/DenormalizerAwareInterface.php new file mode 100644 index 0000000000000..4a6a4e26e92da --- /dev/null +++ b/src/Symfony/Component/Serializer/Normalizer/DenormalizerAwareInterface.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Normalizer; + +/** + * Class accepting a denormalizer. + * + * @author Joel Wurtz + */ +interface DenormalizerAwareInterface +{ + /** + * Sets the owning Denormalizer object. + * + * @param DenormalizerInterface $denormalizer + */ + public function setDenormalizer(DenormalizerInterface $denormalizer); +} diff --git a/src/Symfony/Component/Serializer/Normalizer/DenormalizerAwareTrait.php b/src/Symfony/Component/Serializer/Normalizer/DenormalizerAwareTrait.php new file mode 100644 index 0000000000000..8a8a1ad523b11 --- /dev/null +++ b/src/Symfony/Component/Serializer/Normalizer/DenormalizerAwareTrait.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Normalizer; + +/** + * DenormalizerAware trait. + * + * @author Joel Wurtz + */ +trait DenormalizerAwareTrait +{ + /** + * @var DenormalizerInterface + */ + protected $denormalizer; + + /** + * Sets the Denormalizer. + * + * @param DenormalizerInterface $denormalizer A DenormalizerInterface instance + */ + public function setSerializer(DenormalizerInterface $denormalizer) + { + $this->denormalizer = $denormalizer; + } +} diff --git a/src/Symfony/Component/Serializer/Normalizer/NormalizerAwareInterface.php b/src/Symfony/Component/Serializer/Normalizer/NormalizerAwareInterface.php new file mode 100644 index 0000000000000..55015fe6658b3 --- /dev/null +++ b/src/Symfony/Component/Serializer/Normalizer/NormalizerAwareInterface.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Normalizer; + +/** + * Class accepting a normalizer. + * + * @author Joel Wurtz + */ +interface NormalizerAwareInterface +{ + /** + * Sets the owning Normalizer object. + * + * @param NormalizerInterface $normalizer + */ + public function setNormalizer(NormalizerInterface $normalizer); +} diff --git a/src/Symfony/Component/Serializer/Normalizer/NormalizerAwareTrait.php b/src/Symfony/Component/Serializer/Normalizer/NormalizerAwareTrait.php new file mode 100644 index 0000000000000..cd053970dee2e --- /dev/null +++ b/src/Symfony/Component/Serializer/Normalizer/NormalizerAwareTrait.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Normalizer; + +/** + * NormalizerAware trait. + * + * @author Joel Wurtz + */ +trait NormalizerAwareTrait +{ + /** + * @var NormalizerInterface + */ + protected $normalizer; + + /** + * Sets the normalizer. + * + * @param NormalizerInterface $normalizer A NormalizerInterface instance + */ + public function setSerializer(NormalizerInterface $normalizer) + { + $this->normalizer = $normalizer; + } +} diff --git a/src/Symfony/Component/Serializer/Normalizer/SerializerAwareNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/SerializerAwareNormalizer.php index 395685707405c..0480d9ffba98b 100644 --- a/src/Symfony/Component/Serializer/Normalizer/SerializerAwareNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/SerializerAwareNormalizer.php @@ -11,26 +11,17 @@ namespace Symfony\Component\Serializer\Normalizer; -use Symfony\Component\Serializer\SerializerInterface; +use Symfony\Component\Serializer\SerializerAwareTrait; use Symfony\Component\Serializer\SerializerAwareInterface; /** * SerializerAware Normalizer implementation. * * @author Jordi Boggiano + * + * @deprecated since version 3.1, to be removed in 4.0. Use the SerializerAwareTrait instead. */ abstract class SerializerAwareNormalizer implements SerializerAwareInterface { - /** - * @var SerializerInterface - */ - protected $serializer; - - /** - * {@inheritdoc} - */ - public function setSerializer(SerializerInterface $serializer) - { - $this->serializer = $serializer; - } + use SerializerAwareTrait; } diff --git a/src/Symfony/Component/Serializer/Serializer.php b/src/Symfony/Component/Serializer/Serializer.php index 59943550a554a..d8f257a12ef84 100644 --- a/src/Symfony/Component/Serializer/Serializer.php +++ b/src/Symfony/Component/Serializer/Serializer.php @@ -15,6 +15,8 @@ use Symfony\Component\Serializer\Encoder\ChainEncoder; use Symfony\Component\Serializer\Encoder\EncoderInterface; use Symfony\Component\Serializer\Encoder\DecoderInterface; +use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface; +use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; use Symfony\Component\Serializer\Exception\LogicException; @@ -68,6 +70,14 @@ public function __construct(array $normalizers = array(), array $encoders = arra if ($normalizer instanceof SerializerAwareInterface) { $normalizer->setSerializer($this); } + + if ($normalizer instanceof DenormalizerAwareInterface) { + $normalizer->setDenormalizer($this); + } + + if ($normalizer instanceof NormalizerAwareInterface) { + $normalizer->setNormalizer($this); + } } $this->normalizers = $normalizers; diff --git a/src/Symfony/Component/Serializer/SerializerAwareTrait.php b/src/Symfony/Component/Serializer/SerializerAwareTrait.php new file mode 100644 index 0000000000000..7f5839eef3e6d --- /dev/null +++ b/src/Symfony/Component/Serializer/SerializerAwareTrait.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer; + +/** + * SerializerAware trait. + * + * @author Joel Wurtz + */ +trait SerializerAwareTrait +{ + /** + * @var SerializerInterface + */ + protected $serializer; + + /** + * Sets the serializer. + * + * @param SerializerInterface $serializer A SerializerInterface instance + */ + public function setSerializer(SerializerInterface $serializer) + { + $this->serializer = $serializer; + } +} diff --git a/src/Symfony/Component/Serializer/Tests/SerializerTest.php b/src/Symfony/Component/Serializer/Tests/SerializerTest.php index 0a6bbe51bdb97..2bb03483db27a 100644 --- a/src/Symfony/Component/Serializer/Tests/SerializerTest.php +++ b/src/Symfony/Component/Serializer/Tests/SerializerTest.php @@ -12,6 +12,10 @@ namespace Symfony\Component\Serializer\Tests; use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer; +use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface; +use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; +use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface; +use Symfony\Component\Serializer\Normalizer\NormalizerInterface; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Symfony\Component\Serializer\Normalizer\PropertyNormalizer; use Symfony\Component\Serializer\Serializer; @@ -312,6 +316,26 @@ public function testDeserializeArray() $serializer->deserialize($jsonData, __NAMESPACE__.'\Model[]', 'json') ); } + + public function testNormalizerAware() + { + $normalizerAware = $this->getMock(NormalizerAwareInterface::class); + $normalizerAware->expects($this->once()) + ->method('setNormalizer') + ->with($this->isInstanceOf(NormalizerInterface::class)); + + new Serializer([$normalizerAware]); + } + + public function testDenormalizerAware() + { + $denormalizerAware = $this->getMock(DenormalizerAwareInterface::class); + $denormalizerAware->expects($this->once()) + ->method('setDenormalizer') + ->with($this->isInstanceOf(DenormalizerInterface::class)); + + new Serializer([$denormalizerAware]); + } } class Model 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