DataSourcePool.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\View;
  7. use Magento\Framework\View\Element\BlockFactory;
  8. /**
  9. * Class DataSourcePool
  10. */
  11. class DataSourcePool
  12. {
  13. /**
  14. * Block factory
  15. *
  16. * @var \Magento\Framework\View\Element\BlockFactory
  17. */
  18. protected $blockFactory;
  19. /**
  20. * Data sources
  21. *
  22. * @var array
  23. */
  24. protected $dataSources = [];
  25. /**
  26. * Assignments
  27. *
  28. * @var array
  29. */
  30. protected $assignments = [];
  31. /**
  32. * Constructors
  33. *
  34. * @param BlockFactory $blockFactory
  35. */
  36. public function __construct(BlockFactory $blockFactory)
  37. {
  38. $this->blockFactory = $blockFactory;
  39. }
  40. /**
  41. * Add data source
  42. *
  43. * @param string $name
  44. * @param string $class
  45. * @return object
  46. * @throws \Exception
  47. */
  48. public function add($name, $class)
  49. {
  50. if (!isset($this->dataSources[$name])) {
  51. if (!class_exists($class)) {
  52. throw new \InvalidArgumentException(
  53. (string)new \Magento\Framework\Phrase('Invalid Data Source class name: %1', [$class])
  54. );
  55. }
  56. $data = $this->blockFactory->createBlock($class);
  57. $this->dataSources[$name] = $data;
  58. }
  59. return $this->dataSources[$name];
  60. }
  61. /**
  62. * Get data source
  63. *
  64. * @param string|null $name
  65. * @return array|object|null
  66. */
  67. public function get($name = null)
  68. {
  69. if (!isset($name)) {
  70. return $this->dataSources;
  71. }
  72. return $this->dataSources[$name] ?? null;
  73. }
  74. /**
  75. * Assign
  76. *
  77. * @param string $dataName
  78. * @param string $namespace
  79. * @param string $alias
  80. * @return void
  81. */
  82. public function assign($dataName, $namespace, $alias)
  83. {
  84. $alias = $alias ?: $dataName;
  85. $data = $this->get($dataName);
  86. $this->assignments[$namespace][$alias] = $data;
  87. }
  88. /**
  89. * Retrieve namespace data
  90. *
  91. * @param string $namespace
  92. * @return array
  93. */
  94. public function getNamespaceData($namespace)
  95. {
  96. return $this->assignments[$namespace] ?? [];
  97. }
  98. }