vendor/willdurand/hateoas/src/Factory/EmbeddedsFactory.php line 45

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Hateoas\Factory;
  4. use Hateoas\Model\Embedded;
  5. use Hateoas\Serializer\ExclusionManager;
  6. use Hateoas\Serializer\Metadata\RelationPropertyMetadata;
  7. use JMS\Serializer\Expression\Expression;
  8. use JMS\Serializer\Expression\ExpressionEvaluatorInterface;
  9. use JMS\Serializer\SerializationContext;
  10. use Metadata\MetadataFactoryInterface;
  11. class EmbeddedsFactory
  12. {
  13.     /**
  14.      * @var ExpressionEvaluatorInterface
  15.      */
  16.     private $expressionEvaluator;
  17.     /**
  18.      * @var ExclusionManager
  19.      */
  20.     private $exclusionManager;
  21.     /**
  22.      * @var MetadataFactoryInterface
  23.      */
  24.     private $metadataFactory;
  25.     public function __construct(
  26.         MetadataFactoryInterface $metadataFactory,
  27.         ExpressionEvaluatorInterface $expressionEvaluator,
  28.         ExclusionManager $exclusionManager
  29.     ) {
  30.         $this->expressionEvaluator $expressionEvaluator;
  31.         $this->exclusionManager $exclusionManager;
  32.         $this->metadataFactory $metadataFactory;
  33.     }
  34.     /**
  35.      * @return Embedded[]
  36.      */
  37.     public function create(object $objectSerializationContext $context): array
  38.     {
  39.         $embeddeds = [];
  40.         if (null !== ($classMetadata $this->metadataFactory->getMetadataForClass(get_class($object)))) {
  41.             $langugeData = ['object' => $object'context' => $context];
  42.             /**
  43.              * @var $relation Relation
  44.              */
  45.             foreach ($classMetadata->getRelations() as $relation) {
  46.                 if ($this->exclusionManager->shouldSkipEmbedded($object$relation$context)) {
  47.                     continue;
  48.                 }
  49.                 $rel $relation->getName();
  50.                 $data $this->checkExpression($relation->getEmbedded()->getContent(), $langugeData);
  51.                 $xmlElementName $this->checkExpression($relation->getEmbedded()->getXmlElementName(), $langugeData);
  52.                 $propertyMetadata = new RelationPropertyMetadata($relation->getEmbedded()->getExclusion(), $relation);
  53.                 $embeddeds[] = new Embedded($rel$data$propertyMetadata$xmlElementName$relation->getEmbedded()->getType());
  54.             }
  55.         }
  56.         return $embeddeds;
  57.     }
  58.     /**
  59.      * @param mixed $exp
  60.      * @param array $data
  61.      *
  62.      * @return mixed
  63.      */
  64.     private function checkExpression($exp, array $data)
  65.     {
  66.         if ($exp instanceof Expression) {
  67.             return $this->expressionEvaluator->evaluate((string) $exp$data);
  68.         } else {
  69.             return $exp;
  70.         }
  71.     }
  72. }