DataProviderFactory.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Search\Dynamic;
  7. use Magento\Framework\ObjectManagerInterface;
  8. use Magento\Framework\Search\EngineResolverInterface;
  9. /**
  10. * @api
  11. * @since 100.0.2
  12. */
  13. class DataProviderFactory
  14. {
  15. /**
  16. * @var ObjectManagerInterface
  17. */
  18. private $objectManager;
  19. /**
  20. * @var string
  21. */
  22. private $dataProvider;
  23. /**
  24. * @param ObjectManagerInterface $objectManager
  25. * @param EngineResolverInterface $engineResolver
  26. * @param string[] $dataProviders
  27. */
  28. public function __construct(
  29. ObjectManagerInterface $objectManager,
  30. EngineResolverInterface $engineResolver,
  31. $dataProviders
  32. ) {
  33. $this->objectManager = $objectManager;
  34. $configValue = $engineResolver->getCurrentSearchEngine();
  35. if (isset($dataProviders[$configValue])) {
  36. $this->dataProvider = $dataProviders[$configValue];
  37. } else {
  38. throw new \LogicException("DataProvider not found by config {$configValue}");
  39. }
  40. }
  41. /**
  42. * Create data provider
  43. *
  44. * @param array $data
  45. * @return DataProviderInterface
  46. */
  47. public function create(array $data = [])
  48. {
  49. $dataProvider = $this->objectManager->create($this->dataProvider, $data);
  50. if (!$dataProvider instanceof DataProviderInterface) {
  51. throw new \LogicException(
  52. 'DataProvider not instance of interface ' . DataProviderInterface::class
  53. );
  54. }
  55. return $dataProvider;
  56. }
  57. }