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

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