vendor/friendsofsymfony/rest-bundle/Serializer/JMSSerializerAdapter.php line 56

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the FOSRestBundle package.
  4.  *
  5.  * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace FOS\RestBundle\Serializer;
  11. use FOS\RestBundle\Context\Context;
  12. use JMS\Serializer\Context as JMSContext;
  13. use JMS\Serializer\ContextFactory\DeserializationContextFactoryInterface;
  14. use JMS\Serializer\ContextFactory\SerializationContextFactoryInterface;
  15. use JMS\Serializer\DeserializationContext;
  16. use JMS\Serializer\SerializationContext;
  17. use JMS\Serializer\SerializerInterface;
  18. /**
  19.  * Adapter to plug the JMS serializer into the FOSRestBundle Serializer API.
  20.  *
  21.  * @author Christian Flothmann <christian.flothmann@xabbuh.de>
  22.  */
  23. final class JMSSerializerAdapter implements Serializer
  24. {
  25.     /**
  26.      * @internal
  27.      */
  28.     const SERIALIZATION 0;
  29.     /**
  30.      * @internal
  31.      */
  32.     const DESERIALIZATION 1;
  33.     private $serializer;
  34.     private $serializationContextFactory;
  35.     private $deserializationContextFactory;
  36.     public function __construct(
  37.         SerializerInterface $serializer,
  38.         SerializationContextFactoryInterface $serializationContextFactory null,
  39.         DeserializationContextFactoryInterface $deserializationContextFactory null
  40.     ) {
  41.         $this->serializer $serializer;
  42.         $this->serializationContextFactory $serializationContextFactory;
  43.         $this->deserializationContextFactory $deserializationContextFactory;
  44.     }
  45.     /**
  46.      * {@inheritdoc}
  47.      */
  48.     public function serialize($datastring $formatContext $context): string
  49.     {
  50.         $context $this->convertContext($contextself::SERIALIZATION);
  51.         return $this->serializer->serialize($data$format$context);
  52.     }
  53.     /**
  54.      * {@inheritdoc}
  55.      */
  56.     public function deserialize(string $datastring $typestring $formatContext $context)
  57.     {
  58.         $context $this->convertContext($contextself::DESERIALIZATION);
  59.         return $this->serializer->deserialize($data$type$format$context);
  60.     }
  61.     private function convertContext(Context $contextint $direction): JMSContext
  62.     {
  63.         if (self::SERIALIZATION === $direction) {
  64.             $jmsContext $this->serializationContextFactory
  65.                 $this->serializationContextFactory->createSerializationContext()
  66.                 : SerializationContext::create();
  67.         } else {
  68.             $jmsContext $this->deserializationContextFactory
  69.                 $this->deserializationContextFactory->createDeserializationContext()
  70.                 : DeserializationContext::create();
  71.         }
  72.         foreach ($context->getAttributes() as $key => $value) {
  73.             $jmsContext->setAttribute($key$value);
  74.         }
  75.         if (null !== $context->getVersion()) {
  76.             $jmsContext->setVersion($context->getVersion());
  77.         }
  78.         if (null !== $context->getGroups()) {
  79.             $jmsContext->setGroups($context->getGroups());
  80.         }
  81.         if (true === $context->isMaxDepthEnabled()) {
  82.             $jmsContext->enableMaxDepthChecks();
  83.         }
  84.         if (null !== $context->getSerializeNull()) {
  85.             $jmsContext->setSerializeNull($context->getSerializeNull());
  86.         }
  87.         foreach ($context->getExclusionStrategies() as $strategy) {
  88.             $jmsContext->addExclusionStrategy($strategy);
  89.         }
  90.         return $jmsContext;
  91.     }
  92. }