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; } }