Config.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backend\Model\Menu;
  7. /**
  8. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  9. * @api
  10. * @since 100.0.2
  11. */
  12. class Config
  13. {
  14. const CACHE_ID = 'backend_menu_config';
  15. const CACHE_MENU_OBJECT = 'backend_menu_object';
  16. /**
  17. * @var \Magento\Framework\App\Cache\Type\Config
  18. */
  19. protected $_configCacheType;
  20. /**
  21. * @var \Magento\Framework\Event\ManagerInterface
  22. */
  23. protected $_eventManager;
  24. /**
  25. * @var \Magento\Backend\Model\MenuFactory
  26. */
  27. protected $_menuFactory;
  28. /**
  29. * Menu model
  30. *
  31. * @var \Magento\Backend\Model\Menu
  32. */
  33. protected $_menu;
  34. /**
  35. * @var \Psr\Log\LoggerInterface
  36. */
  37. protected $_logger;
  38. /**
  39. * @var \Magento\Backend\Model\Menu\Config\Reader
  40. */
  41. protected $_configReader;
  42. /**
  43. * @var \Magento\Framework\App\Config\ScopeConfigInterface
  44. */
  45. protected $_scopeConfig;
  46. /**
  47. * @var \Magento\Backend\Model\Menu\AbstractDirector
  48. */
  49. protected $_director;
  50. /**
  51. * @var \Magento\Framework\App\State
  52. */
  53. protected $_appState;
  54. /**
  55. * @param \Magento\Backend\Model\Menu\Builder $menuBuilder
  56. * @param \Magento\Backend\Model\Menu\AbstractDirector $menuDirector
  57. * @param \Magento\Backend\Model\MenuFactory $menuFactory
  58. * @param \Magento\Backend\Model\Menu\Config\Reader $configReader
  59. * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
  60. * @param \Magento\Framework\Event\ManagerInterface $eventManager
  61. * @param \Psr\Log\LoggerInterface $logger
  62. * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  63. * @param \Magento\Framework\App\State $appState
  64. */
  65. public function __construct(
  66. \Magento\Backend\Model\Menu\Builder $menuBuilder,
  67. \Magento\Backend\Model\Menu\AbstractDirector $menuDirector,
  68. \Magento\Backend\Model\MenuFactory $menuFactory,
  69. \Magento\Backend\Model\Menu\Config\Reader $configReader,
  70. \Magento\Framework\App\Cache\Type\Config $configCacheType,
  71. \Magento\Framework\Event\ManagerInterface $eventManager,
  72. \Psr\Log\LoggerInterface $logger,
  73. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
  74. \Magento\Framework\App\State $appState
  75. ) {
  76. $this->_menuBuilder = $menuBuilder;
  77. $this->_director = $menuDirector;
  78. $this->_configCacheType = $configCacheType;
  79. $this->_eventManager = $eventManager;
  80. $this->_logger = $logger;
  81. $this->_menuFactory = $menuFactory;
  82. $this->_configReader = $configReader;
  83. $this->_scopeConfig = $scopeConfig;
  84. $this->_appState = $appState;
  85. }
  86. /**
  87. * Build menu model from config
  88. *
  89. * @return \Magento\Backend\Model\Menu
  90. * @throws \Exception|\InvalidArgumentException
  91. * @throws \Exception
  92. * @throws \BadMethodCallException|\Exception
  93. * @throws \Exception|\OutOfRangeException
  94. */
  95. public function getMenu()
  96. {
  97. try {
  98. $this->_initMenu();
  99. return $this->_menu;
  100. } catch (\InvalidArgumentException $e) {
  101. $this->_logger->critical($e);
  102. throw $e;
  103. } catch (\BadMethodCallException $e) {
  104. $this->_logger->critical($e);
  105. throw $e;
  106. } catch (\OutOfRangeException $e) {
  107. $this->_logger->critical($e);
  108. throw $e;
  109. } catch (\Exception $e) {
  110. throw $e;
  111. }
  112. }
  113. /**
  114. * Initialize menu object
  115. *
  116. * @return void
  117. */
  118. protected function _initMenu()
  119. {
  120. if (!$this->_menu) {
  121. $this->_menu = $this->_menuFactory->create();
  122. $cache = $this->_configCacheType->load(self::CACHE_MENU_OBJECT);
  123. if ($cache) {
  124. $this->_menu->unserialize($cache);
  125. return;
  126. }
  127. $this->_director->direct(
  128. $this->_configReader->read($this->_appState->getAreaCode()),
  129. $this->_menuBuilder,
  130. $this->_logger
  131. );
  132. $this->_menu = $this->_menuBuilder->getResult($this->_menu);
  133. $this->_configCacheType->save($this->_menu->serialize(), self::CACHE_MENU_OBJECT);
  134. }
  135. }
  136. }