vendor/shopware/core/Framework/Api/Converter/ApiVersionConverter.php line 81

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework\Api\Converter;
  3. use Shopware\Core\Framework\Api\Converter\Exceptions\ApiConversionException;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Entity;
  5. use Shopware\Core\Framework\DataAbstractionLayer\EntityDefinition;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Field\Field;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Field\ManyToManyAssociationField;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Field\ManyToOneAssociationField;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Field\OneToManyAssociationField;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Field\OneToOneAssociationField;
  11. class ApiVersionConverter
  12. {
  13.     /**
  14.      * @var ConverterRegistry
  15.      */
  16.     private $converterRegistry;
  17.     /**
  18.      * @internal
  19.      */
  20.     public function __construct(ConverterRegistry $converterRegistry)
  21.     {
  22.         $this->converterRegistry $converterRegistry;
  23.     }
  24.     public function convertEntity(EntityDefinition $definitionEntity $entity): array
  25.     {
  26.         return $entity->jsonSerialize();
  27.     }
  28.     public function convertPayload(EntityDefinition $definition, array $payloadApiConversionException $conversionExceptionstring $pointer ''): array
  29.     {
  30.         $toOneFields $definition->getFields()->filter(function (Field $field) {
  31.             return $field instanceof OneToOneAssociationField || $field instanceof ManyToOneAssociationField;
  32.         });
  33.         /** @var OneToOneAssociationField|OneToManyAssociationField $field */
  34.         foreach ($toOneFields as $field) {
  35.             if (!\array_key_exists($field->getPropertyName(), $payload) || !\is_array($payload[$field->getPropertyName()])) {
  36.                 continue;
  37.             }
  38.             $payload[$field->getPropertyName()] = $this->convertPayload(
  39.                 $field->getReferenceDefinition(),
  40.                 $payload[$field->getPropertyName()],
  41.                 $conversionException,
  42.                 $pointer '/' $field->getPropertyName()
  43.             );
  44.         }
  45.         $toManyFields $definition->getFields()->filter(function (Field $field) {
  46.             return $field instanceof OneToManyAssociationField || $field instanceof ManyToManyAssociationField;
  47.         });
  48.         /** @var OneToManyAssociationField|ManyToManyAssociationField $field */
  49.         foreach ($toManyFields as $field) {
  50.             if (!\array_key_exists($field->getPropertyName(), $payload) || !\is_array($payload[$field->getPropertyName()])) {
  51.                 continue;
  52.             }
  53.             foreach ($payload[$field->getPropertyName()] as $key => $entityPayload) {
  54.                 $payload[$field->getPropertyName()][$key] = $this->convertPayload(
  55.                     $field instanceof ManyToManyAssociationField $field->getToManyReferenceDefinition() : $field->getReferenceDefinition(),
  56.                     $entityPayload,
  57.                     $conversionException,
  58.                     $pointer '/' $key '/' $field->getPropertyName()
  59.                 );
  60.             }
  61.         }
  62.         $payload $this->validateFields($definition$payload);
  63.         return $payload;
  64.     }
  65.     private function validateFields(EntityDefinition $definition, array $payload): array
  66.     {
  67.         return $this->converterRegistry->convert($definition->getEntityName(), $payload);
  68.     }
  69. }