ConfigurableOptionsProvider.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\ConfigurableProduct\Pricing\Price;
  7. use Magento\Catalog\Api\Data\ProductInterface;
  8. use Magento\Catalog\Model\ResourceModel\Product\LinkedProductSelectBuilderInterface;
  9. use Magento\Framework\App\ResourceConnection;
  10. use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
  11. use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
  12. use Magento\Framework\App\RequestSafetyInterface;
  13. class ConfigurableOptionsProvider implements ConfigurableOptionsProviderInterface
  14. {
  15. /**
  16. * @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable
  17. */
  18. private $configurable;
  19. /**
  20. * @var ProductInterface[]
  21. */
  22. private $products;
  23. /**
  24. * @param Configurable $configurable
  25. * @param ResourceConnection $resourceConnection
  26. * @param LinkedProductSelectBuilderInterface $linkedProductSelectBuilder
  27. * @param CollectionFactory $collectionFactory
  28. * @param RequestSafetyInterface $requestSafety
  29. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  30. */
  31. public function __construct(
  32. Configurable $configurable,
  33. ResourceConnection $resourceConnection,
  34. LinkedProductSelectBuilderInterface $linkedProductSelectBuilder,
  35. CollectionFactory $collectionFactory,
  36. RequestSafetyInterface $requestSafety
  37. ) {
  38. $this->configurable = $configurable;
  39. }
  40. /**
  41. * {@inheritdoc}
  42. */
  43. public function getProducts(ProductInterface $product)
  44. {
  45. if (!isset($this->products[$product->getId()])) {
  46. $this->products[$product->getId()] = $this->configurable->getUsedProducts($product);
  47. }
  48. return $this->products[$product->getId()];
  49. }
  50. }