vendor/shopware/core/Framework/DataAbstractionLayer/Field/Field.php line 115

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework\DataAbstractionLayer\Field;
  3. use Shopware\Core\Framework\Api\Context\AdminApiSource;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldAccessorBuilder\DefaultFieldAccessorBuilder;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldAccessorBuilder\FieldAccessorBuilderInterface;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Dbal\FieldResolver\AbstractFieldResolver;
  7. use Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\ApiAware;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\Flag;
  10. use Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\FieldSerializerInterface;
  11. use Shopware\Core\Framework\Struct\Struct;
  12. abstract class Field extends Struct
  13. {
  14.     /**
  15.      * @var Flag[]
  16.      */
  17.     protected $flags = [];
  18.     /**
  19.      * @var string
  20.      */
  21.     protected $propertyName;
  22.     /**
  23.      * @var FieldSerializerInterface
  24.      */
  25.     private $serializer;
  26.     /**
  27.      * @var AbstractFieldResolver|null
  28.      */
  29.     private $resolver;
  30.     /**
  31.      * @var FieldAccessorBuilderInterface|null
  32.      */
  33.     private $accessorBuilder;
  34.     /**
  35.      * @var DefinitionInstanceRegistry
  36.      */
  37.     private $registry;
  38.     public function __construct(string $propertyName)
  39.     {
  40.         $this->propertyName $propertyName;
  41.         $this->addFlags(new ApiAware(AdminApiSource::class));
  42.     }
  43.     public function compile(DefinitionInstanceRegistry $registry): void
  44.     {
  45.         $this->registry $registry;
  46.     }
  47.     public function getPropertyName(): string
  48.     {
  49.         return $this->propertyName;
  50.     }
  51.     public function getExtractPriority(): int
  52.     {
  53.         return 0;
  54.     }
  55.     public function setFlags(Flag ...$flags): self
  56.     {
  57.         $this->flags = [];
  58.         foreach ($flags as $flag) {
  59.             $this->flags[\get_class($flag)] = $flag;
  60.         }
  61.         if (!$this->is(ApiAware::class)) {
  62.             $this->addFlags(new ApiAware(AdminApiSource::class));
  63.         }
  64.         return $this;
  65.     }
  66.     public function addFlags(Flag ...$flags): self
  67.     {
  68.         foreach ($flags as $flag) {
  69.             $this->flags[\get_class($flag)] = $flag;
  70.         }
  71.         return $this;
  72.     }
  73.     public function removeFlag(string $class): self
  74.     {
  75.         unset($this->flags[$class]);
  76.         return $this;
  77.     }
  78.     public function is(string $class): bool
  79.     {
  80.         return $this->getFlag($class) !== null;
  81.     }
  82.     public function getFlag(string $class): ?Flag
  83.     {
  84.         return $this->flags[$class] ?? null;
  85.     }
  86.     /**
  87.      * @return Flag[]
  88.      */
  89.     public function getFlags(): array
  90.     {
  91.         return array_values($this->flags);
  92.     }
  93.     public function getSerializer(): FieldSerializerInterface
  94.     {
  95.         $this->initLazy();
  96.         return $this->serializer;
  97.     }
  98.     /**
  99.      * @return AbstractFieldResolver|null
  100.      */
  101.     public function getResolver()
  102.     {
  103.         $this->initLazy();
  104.         return $this->resolver;
  105.     }
  106.     public function getAccessorBuilder(): ?FieldAccessorBuilderInterface
  107.     {
  108.         $this->initLazy();
  109.         return $this->accessorBuilder;
  110.     }
  111.     public function isCompiled(): bool
  112.     {
  113.         return $this->registry !== null;
  114.     }
  115.     abstract protected function getSerializerClass(): string;
  116.     protected function getResolverClass(): ?string
  117.     {
  118.         return null;
  119.     }
  120.     protected function getAccessorBuilderClass(): ?string
  121.     {
  122.         if ($this instanceof StorageAware) {
  123.             return DefaultFieldAccessorBuilder::class;
  124.         }
  125.         return null;
  126.     }
  127.     private function initLazy(): void
  128.     {
  129.         if ($this->serializer !== null) {
  130.             return;
  131.         }
  132.         $this->serializer $this->registry->getSerializer($this->getSerializerClass());
  133.         $resolverClass $this->getResolverClass();
  134.         if ($resolverClass !== null) {
  135.             $this->resolver $this->registry->getResolver($resolverClass);
  136.         }
  137.         $accessorBuilderClass $this->getAccessorBuilderClass();
  138.         if ($accessorBuilderClass !== null) {
  139.             $this->accessorBuilder $this->registry->getAccessorBuilder($accessorBuilderClass);
  140.         }
  141.     }
  142. }