vendor/shopware/core/Framework/DataAbstractionLayer/FieldSerializer/ListFieldSerializer.php line 68

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer;
  4. use Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Exception\InvalidSerializerFieldException;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Field\Field;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Field\ListField;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Write\DataStack\KeyValuePair;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Write\EntityExistence;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Write\FieldException\WriteFieldException;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Write\WriteParameterBag;
  12. use Shopware\Core\Framework\Feature;
  13. use Shopware\Core\Framework\Log\Package;
  14. use Symfony\Component\Validator\Constraints\Type;
  15. use Symfony\Component\Validator\Validator\ValidatorInterface;
  16. /**
  17.  * @deprecated tag:v6.5.0 - reason:becomes-internal - Will be internal
  18.  */
  19. #[Package('core')]
  20. class ListFieldSerializer extends AbstractFieldSerializer
  21. {
  22.     /**
  23.      * @internal
  24.      */
  25.     public function __construct(
  26.         ValidatorInterface $validator,
  27.         DefinitionInstanceRegistry $definitionRegistry
  28.     ) {
  29.         parent::__construct($validator$definitionRegistry);
  30.     }
  31.     /**
  32.      * @throws InvalidSerializerFieldException
  33.      */
  34.     public function encode(
  35.         Field $field,
  36.         EntityExistence $existence,
  37.         KeyValuePair $data,
  38.         WriteParameterBag $parameters
  39.     ): \Generator {
  40.         if (!$field instanceof ListField) {
  41.             throw new InvalidSerializerFieldException(ListField::class, $field);
  42.         }
  43.         $this->validateIfNeeded($field$existence$data$parameters);
  44.         $value $data->getValue();
  45.         if ($value !== null) {
  46.             $value array_values($value);
  47.             $this->validateTypes($field$value$parameters);
  48.             $value JsonFieldSerializer::encodeJson($value);
  49.         }
  50.         yield $field->getStorageName() => $value;
  51.     }
  52.     /**
  53.      * @return array|null
  54.      *
  55.      * @deprecated tag:v6.5.0 - reason:return-type-change - The return type will be native typed
  56.      */
  57.     public function decode(Field $field$value)/* ?array*/
  58.     {
  59.         if ($value === null) {
  60.             return null;
  61.         }
  62.         /** @deprecated tag:v6.5.0 - remove whole is block as the `strict` behaviour will always be used */
  63.         if (!Feature::isActive('v6.5.0.0')) {
  64.             if ($field instanceof ListField && $field->isStrict()) {
  65.                 return array_values(json_decode($valuetrue));
  66.             }
  67.             return json_decode($valuetrue);
  68.         }
  69.         return array_values(json_decode($valuetrue));
  70.     }
  71.     protected function getConstraints(Field $field): array
  72.     {
  73.         return [new Type('array')];
  74.     }
  75.     protected function validateTypes(ListField $field, array $valuesWriteParameterBag $parameters): void
  76.     {
  77.         $fieldType $field->getFieldType();
  78.         if ($fieldType === null) {
  79.             return;
  80.         }
  81.         $existence = new EntityExistence(null, [], falsefalsefalse, []);
  82.         /** @var Field $listField */
  83.         $listField = new $fieldType('key''key');
  84.         $listField->compile($this->definitionRegistry);
  85.         $nestedParameters $parameters->cloneForSubresource(
  86.             $parameters->getDefinition(),
  87.             $parameters->getPath() . '/' $field->getPropertyName()
  88.         );
  89.         foreach ($values as $i => $value) {
  90.             try {
  91.                 $kvPair = new KeyValuePair((string) $i$valuetrue);
  92.                 $x $listField->getSerializer()->encode($listField$existence$kvPair$nestedParameters);
  93.                 $_x iterator_to_array($x);
  94.             } catch (WriteFieldException $exception) {
  95.                 $parameters->getContext()->getExceptions()->add($exception);
  96.             }
  97.         }
  98.     }
  99. }