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. use Shopware\Core\Framework\Log\Package;
  12. #[Package('core')]
  13. class ApiVersionConverter
  14. {
  15.     /**
  16.      * @var ConverterRegistry
  17.      */
  18.     private $converterRegistry;
  19.     /**
  20.      * @internal
  21.      */
  22.     public function __construct(ConverterRegistry $converterRegistry)
  23.     {
  24.         $this->converterRegistry $converterRegistry;
  25.     }
  26.     public function convertEntity(EntityDefinition $definitionEntity $entity): array
  27.     {
  28.         return $entity->jsonSerialize();
  29.     }
  30.     public function convertPayload(EntityDefinition $definition, array $payloadApiConversionException $conversionExceptionstring $pointer ''): array
  31.     {
  32.         $toOneFields $definition->getFields()->filter(function (Field $field) {
  33.             return $field instanceof OneToOneAssociationField || $field instanceof ManyToOneAssociationField;
  34.         });
  35.         /** @var OneToOneAssociationField|OneToManyAssociationField $field */
  36.         foreach ($toOneFields as $field) {
  37.             if (!\array_key_exists($field->getPropertyName(), $payload) || !\is_array($payload[$field->getPropertyName()])) {
  38.                 continue;
  39.             }
  40.             $payload[$field->getPropertyName()] = $this->convertPayload(
  41.                 $field->getReferenceDefinition(),
  42.                 $payload[$field->getPropertyName()],
  43.                 $conversionException,
  44.                 $pointer '/' $field->getPropertyName()
  45.             );
  46.         }
  47.         $toManyFields $definition->getFields()->filter(function (Field $field) {
  48.             return $field instanceof OneToManyAssociationField || $field instanceof ManyToManyAssociationField;
  49.         });
  50.         /** @var OneToManyAssociationField|ManyToManyAssociationField $field */
  51.         foreach ($toManyFields as $field) {
  52.             if (!\array_key_exists($field->getPropertyName(), $payload) || !\is_array($payload[$field->getPropertyName()])) {
  53.                 continue;
  54.             }
  55.             foreach ($payload[$field->getPropertyName()] as $key => $entityPayload) {
  56.                 $payload[$field->getPropertyName()][$key] = $this->convertPayload(
  57.                     $field instanceof ManyToManyAssociationField $field->getToManyReferenceDefinition() : $field->getReferenceDefinition(),
  58.                     $entityPayload,
  59.                     $conversionException,
  60.                     $pointer '/' $key '/' $field->getPropertyName()
  61.                 );
  62.             }
  63.         }
  64.         $payload $this->validateFields($definition$payload);
  65.         return $payload;
  66.     }
  67.     private function validateFields(EntityDefinition $definition, array $payload): array
  68.     {
  69.         return $this->converterRegistry->convert($definition->getEntityName(), $payload);
  70.     }
  71. }