123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Webapi\Controller;
- use Magento\Framework\Exception\NoSuchEntityException;
- /**
- * Class PathProcessor
- */
- class PathProcessor
- {
- /** Store code alias to indicate that all stores should be affected by action */
- const ALL_STORE_CODE = 'all';
- /**
- * @var \Magento\Store\Model\StoreManagerInterface
- */
- private $storeManager;
- /**
- * @param \Magento\Store\Model\StoreManagerInterface $storeManager
- */
- public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
- {
- $this->storeManager = $storeManager;
- }
- /**
- * Process path
- *
- * @param string $pathInfo
- * @return array
- */
- private function stripPathBeforeStorecode($pathInfo)
- {
- $pathParts = explode('/', trim($pathInfo, '/'));
- array_shift($pathParts);
- $path = '/' . implode('/', $pathParts);
- return explode('/', ltrim($path, '/'), 2);
- }
- /**
- * Process path info
- *
- * @param string $pathInfo
- * @return string
- * @throws NoSuchEntityException
- */
- public function process($pathInfo)
- {
- $pathParts = $this->stripPathBeforeStorecode($pathInfo);
- $storeCode = current($pathParts);
- $stores = $this->storeManager->getStores(false, true);
- if (isset($stores[$storeCode])) {
- $this->storeManager->setCurrentStore($storeCode);
- $path = '/' . (isset($pathParts[1]) ? $pathParts[1] : '');
- } elseif ($storeCode === self::ALL_STORE_CODE) {
- $this->storeManager->setCurrentStore(\Magento\Store\Model\Store::ADMIN_CODE);
- $path = '/' . (isset($pathParts[1]) ? $pathParts[1] : '');
- } else {
- $path = '/' . implode('/', $pathParts);
- }
- return $path;
- }
- }
|