Hydrator.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\EntityManager;
  7. use Magento\Framework\Reflection\DataObjectProcessor;
  8. use Magento\Framework\Api\DataObjectHelper;
  9. /**
  10. * Class Hydrator
  11. */
  12. class Hydrator implements HydratorInterface
  13. {
  14. /**
  15. * @var DataObjectProcessor
  16. */
  17. private $dataObjectProcessor;
  18. /**
  19. * @var DataObjectHelper
  20. */
  21. private $dataObjectHelper;
  22. /**
  23. * @var TypeResolver
  24. */
  25. private $typeResolver;
  26. /**
  27. * @var MapperPool
  28. */
  29. private $mapperPool;
  30. /**
  31. * @param DataObjectProcessor $dataObjectProcessor
  32. * @param DataObjectHelper $dataObjectHelper
  33. * @param TypeResolver $typeResolver
  34. * @param MapperPool $mapperPool
  35. */
  36. public function __construct(
  37. DataObjectProcessor $dataObjectProcessor,
  38. DataObjectHelper $dataObjectHelper,
  39. TypeResolver $typeResolver,
  40. MapperPool $mapperPool
  41. ) {
  42. $this->dataObjectProcessor = $dataObjectProcessor;
  43. $this->dataObjectHelper = $dataObjectHelper;
  44. $this->typeResolver = $typeResolver;
  45. $this->mapperPool = $mapperPool;
  46. }
  47. /**
  48. * {@inheritdoc}
  49. */
  50. public function extract($entity)
  51. {
  52. $entityType = $this->typeResolver->resolve($entity);
  53. $data = $this->dataObjectProcessor->buildOutputDataArray($entity, $entityType);
  54. $mapper = $this->mapperPool->getMapper($entityType);
  55. return $mapper->entityToDatabase($entityType, $data);
  56. }
  57. /**
  58. * {@inheritdoc}
  59. */
  60. public function hydrate($entity, array $data)
  61. {
  62. $entityType = $this->typeResolver->resolve($entity);
  63. $mapper = $this->mapperPool->getMapper($entityType);
  64. $data = $mapper->databaseToEntity(
  65. $entityType,
  66. array_merge($this->extract($entity), $data)
  67. );
  68. $this->dataObjectHelper->populateWithArray($entity, $data, $entityType);
  69. return $entity;
  70. }
  71. }