123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- <?php
- /**
- * Routes configuration model
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\App\Route;
- use Magento\Framework\Serialize\SerializerInterface;
- class Config implements ConfigInterface
- {
- /**
- * @var \Magento\Framework\App\Route\Config\Reader
- */
- protected $_reader;
- /**
- * @var \Magento\Framework\Cache\FrontendInterface
- */
- protected $_cache;
- /**
- * @var string
- */
- protected $_cacheId;
- /**
- * @var \Magento\Framework\Config\ScopeInterface
- */
- protected $_configScope;
- /**
- * @var \Magento\Framework\App\AreaList
- */
- protected $_areaList;
- /**
- * @var array
- */
- protected $_routes;
- /**
- * @var SerializerInterface
- */
- private $serializer;
- /**
- * @param Config\Reader $reader
- * @param \Magento\Framework\Config\CacheInterface $cache
- * @param \Magento\Framework\Config\ScopeInterface $configScope
- * @param \Magento\Framework\App\AreaList $areaList
- * @param string $cacheId
- */
- public function __construct(
- Config\Reader $reader,
- \Magento\Framework\Config\CacheInterface $cache,
- \Magento\Framework\Config\ScopeInterface $configScope,
- \Magento\Framework\App\AreaList $areaList,
- $cacheId = 'RoutesConfig'
- ) {
- $this->_reader = $reader;
- $this->_cache = $cache;
- $this->_cacheId = $cacheId;
- $this->_configScope = $configScope;
- $this->_areaList = $areaList;
- }
- /**
- * Fetch routes from configs by area code and router id
- *
- * @param string $scope
- * @return array
- */
- protected function _getRoutes($scope = null)
- {
- $scope = $scope ?: $this->_configScope->getCurrentScope();
- if (isset($this->_routes[$scope])) {
- return $this->_routes[$scope];
- }
- $cacheId = $scope . '::' . $this->_cacheId;
- $cachedRoutes = $this->_cache->load($cacheId);
- if ($cachedRoutes) {
- $cachedRoutes = $this->getSerializer()->unserialize($cachedRoutes);
- if (is_array($cachedRoutes)) {
- $this->_routes[$scope] = $cachedRoutes;
- return $cachedRoutes;
- }
- }
- $routers = $this->_reader->read($scope);
- $routes = $routers[$this->_areaList->getDefaultRouter($scope)]['routes'];
- $routesData = $this->getSerializer()->serialize($routes);
- $this->_cache->save($routesData, $cacheId);
- $this->_routes[$scope] = $routes;
- return $routes;
- }
- /**
- * Retrieve route front name
- *
- * @param string $routeId
- * @param null $scope
- * @return string
- */
- public function getRouteFrontName($routeId, $scope = null)
- {
- $routes = $this->_getRoutes($scope);
- return isset($routes[$routeId]) ? $routes[$routeId]['frontName'] : $routeId;
- }
- /**
- * @param string $frontName
- * @param string $scope
- * @return bool|int|string
- */
- public function getRouteByFrontName($frontName, $scope = null)
- {
- foreach ($this->_getRoutes($scope) as $routeId => $routeData) {
- if ($routeData['frontName'] == $frontName) {
- return $routeId;
- }
- }
- return false;
- }
- /**
- * @param string $frontName
- * @param string $scope
- * @return string[]
- */
- public function getModulesByFrontName($frontName, $scope = null)
- {
- $routes = $this->_getRoutes($scope);
- $modules = [];
- foreach ($routes as $routeData) {
- if ($routeData['frontName'] == $frontName && isset($routeData['modules'])) {
- $modules = $routeData['modules'];
- break;
- }
- }
- return array_unique($modules);
- }
- /**
- * Get serializer
- *
- * @return \Magento\Framework\Serialize\SerializerInterface
- * @deprecated 101.0.0
- */
- private function getSerializer()
- {
- if ($this->serializer === null) {
- $this->serializer = \Magento\Framework\App\ObjectManager::getInstance()
- ->get(SerializerInterface::class);
- }
- return $this->serializer;
- }
- }
|