Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Create.php
Go to the documentation of this file.
1 <?php
7 
20 
26 class Create implements CreateInterface
27 {
31  private $metadataPool;
32 
36  private $typeResolver;
37 
41  private $resourceConnection;
42 
46  private $eventManager;
47 
51  private $createMain;
52 
56  private $createAttributes;
57 
61  private $createExtensions;
62 
66  private $sequenceApplier;
67 
77  public function __construct(
78  MetadataPool $metadataPool,
79  TypeResolver $typeResolver,
80  ResourceConnection $resourceConnection,
81  EventManager $eventManager,
82  CreateMain $createMain,
83  CreateAttributes $createAttributes,
84  CreateExtensions $createExtensions
85  ) {
86  $this->metadataPool = $metadataPool;
87  $this->typeResolver = $typeResolver;
88  $this->resourceConnection = $resourceConnection;
89  $this->eventManager = $eventManager;
90  $this->createMain = $createMain;
91  $this->createAttributes = $createAttributes;
92  $this->createExtensions = $createExtensions;
93  }
94 
102  public function execute($entity, $arguments = [])
103  {
104  $entityType = $this->typeResolver->resolve($entity);
105  $metadata = $this->metadataPool->getMetadata($entityType);
106  $connection = $this->resourceConnection->getConnectionByName($metadata->getEntityConnectionName());
107  $connection->beginTransaction();
108  try {
109  $this->eventManager->dispatch(
110  'entity_manager_save_before',
111  [
112  'entity_type' => $entityType,
113  'entity' => $entity
114  ]
115  );
116  $this->eventManager->dispatchEntityEvent($entityType, 'save_before', ['entity' => $entity]);
117 
118  $entity = $this->getSequenceApplier()->apply($entity);
119 
120  $entity = $this->createMain->execute($entity, $arguments);
121  $entity = $this->createAttributes->execute($entity, $arguments);
122  $entity = $this->createExtensions->execute($entity, $arguments);
123  $this->eventManager->dispatchEntityEvent($entityType, 'save_after', ['entity' => $entity]);
124  $this->eventManager->dispatch(
125  'entity_manager_save_after',
126  [
127  'entity_type' => $entityType,
128  'entity' => $entity
129  ]
130  );
131  $connection->commit();
132  } catch (DuplicateException $e) {
133  $connection->rollBack();
134  throw new AlreadyExistsException(new Phrase('Unique constraint violation found'), $e);
135  } catch (\Exception $e) {
136  $connection->rollBack();
137  throw $e;
138  }
139  return $entity;
140  }
141 
147  private function getSequenceApplier()
148  {
149  if (!$this->sequenceApplier) {
150  $this->sequenceApplier = ObjectManager::getInstance()->get(
151  SequenceApplier::class
152  );
153  }
154 
155  return $this->sequenceApplier;
156  }
157 }
__construct(MetadataPool $metadataPool, TypeResolver $typeResolver, ResourceConnection $resourceConnection, EventManager $eventManager, CreateMain $createMain, CreateAttributes $createAttributes, CreateExtensions $createExtensions)
Definition: Create.php:77
$entity
Definition: element.phtml:22
$arguments
$connection
Definition: bulk.php:13