Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SequenceApplier.php
Go to the documentation of this file.
1 <?php
7 
12 {
16  private $metadataPool;
17 
21  private $typeResolver;
22 
26  private $sequenceManager;
27 
31  private $sequenceRegistry;
32 
36  private $hydratorPool;
37 
45  public function __construct(
46  \Magento\Framework\EntityManager\MetadataPool $metadataPool,
47  \Magento\Framework\EntityManager\TypeResolver $typeResolver,
48  \Magento\Framework\EntityManager\Sequence\SequenceManager $sequenceManager,
49  \Magento\Framework\EntityManager\Sequence\SequenceRegistry $sequenceRegistry,
50  \Magento\Framework\EntityManager\HydratorPool $hydratorPool
51  ) {
52  $this->metadataPool = $metadataPool;
53  $this->typeResolver = $typeResolver;
54  $this->sequenceManager = $sequenceManager;
55  $this->sequenceRegistry = $sequenceRegistry;
56  $this->hydratorPool = $hydratorPool;
57  }
58 
69  public function apply($entity)
70  {
71  $entityType = $this->typeResolver->resolve($entity);
72 
74  $sequence = $this->sequenceRegistry->retrieve($entityType)['sequence'];
75 
76  if ($sequence) {
77  $metadata = $this->metadataPool->getMetadata($entityType);
78  $hydrator = $this->hydratorPool->getHydrator($entityType);
79 
80  $entityData = $hydrator->extract($entity);
81 
82  // Object already has identifier.
83  if (isset($entityData[$metadata->getIdentifierField()]) && $entityData[$metadata->getIdentifierField()]) {
84  $this->sequenceManager->force($entityType, $entityData[$metadata->getIdentifierField()]);
85  } else {
86  $entityData[$metadata->getIdentifierField()] = $sequence->getNextValue();
87 
88  $entity = $hydrator->hydrate($entity, $entityData);
89  }
90  }
91 
92  return $entity;
93  }
94 }
__construct(\Magento\Framework\EntityManager\MetadataPool $metadataPool, \Magento\Framework\EntityManager\TypeResolver $typeResolver, \Magento\Framework\EntityManager\Sequence\SequenceManager $sequenceManager, \Magento\Framework\EntityManager\Sequence\SequenceRegistry $sequenceRegistry, \Magento\Framework\EntityManager\HydratorPool $hydratorPool)
$entity
Definition: element.phtml:22