Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CreateHandler.php
Go to the documentation of this file.
1 <?php
7 
8 use Magento\Eav\Api\AttributeRepositoryInterface as AttributeRepository;
14 
20 {
24  private $attributeRepository;
25 
29  private $metadataPool;
30 
34  private $searchCriteriaBuilder;
35 
39  private $attributePersistor;
40 
44  private $scopeResolver;
45 
49  private $attributeLoader;
50 
59  public function __construct(
60  AttributeRepository $attributeRepository,
61  MetadataPool $metadataPool,
62  SearchCriteriaBuilder $searchCriteriaBuilder,
63  AttributePersistor $attributePersistor,
64  ScopeResolver $scopeResolver,
65  AttributeLoader $attributeLoader = null
66  ) {
67  $this->attributeRepository = $attributeRepository;
68  $this->metadataPool = $metadataPool;
69  $this->searchCriteriaBuilder = $searchCriteriaBuilder;
70  $this->attributePersistor = $attributePersistor;
71  $this->scopeResolver = $scopeResolver;
72  $this->attributeLoader = $attributeLoader ?: ObjectManager::getInstance()->get(AttributeLoader::class);
73  }
74 
80  protected function getAttributes($entityType, $attributeSetId = null)
81  {
82  return $this->attributeLoader->getAttributes($entityType, $attributeSetId);
83  }
84 
94  public function execute($entityType, $entityData, $arguments = [])
95  {
96  $metadata = $this->metadataPool->getMetadata($entityType);
97  if ($metadata->getEavEntityType()) {
98  $processed = [];
99  $entityLinkField = $metadata->getLinkField();
101  ? $entityData[AttributeLoader::ATTRIBUTE_SET_ID]
102  : null; // @todo verify is it normal to not have attribute_set_id
104  foreach ($this->getAttributes($entityType, $attributeSetId) as $attribute) {
105  if ($attribute->isStatic()) {
106  continue;
107  }
108 
109  $attributeCode = $attribute->getAttributeCode();
110  if (isset($entityData[$attributeCode])
111  && !is_array($entityData[$attributeCode])
112  && !$attribute->isValueEmpty($entityData[$attributeCode])
113  ) {
114  $this->attributePersistor->registerInsert(
115  $entityType,
116  $entityData[$entityLinkField],
118  $entityData[$attributeCode]
119  );
120  $processed[$attributeCode] = $entityData[$attributeCode];
121  }
122  }
123  $context = $this->scopeResolver->getEntityContext($entityType, $entityData);
124  $this->attributePersistor->flush($entityType, $context);
125  }
126  return $entityData;
127  }
128 }
getAttributes($entityType, $attributeSetId=null)
__construct(AttributeRepository $attributeRepository, MetadataPool $metadataPool, SearchCriteriaBuilder $searchCriteriaBuilder, AttributePersistor $attributePersistor, ScopeResolver $scopeResolver, AttributeLoader $attributeLoader=null)
execute($entityType, $entityData, $arguments=[])
$attributeCode
Definition: extend.phtml:12
$searchCriteriaBuilder
$arguments