/** * Get current mca * * @return string */ private function getMca() { $routeParts = ['module' => $this->_request->getModuleName(), 'controller' => $this->_request->getControllerName(), 'action' => $this->_request->getActionName()]; $parts = []; foreach ($routeParts as $key => $value) { if (!empty($value) && $value != $this->_defaultPath->getPart($key)) { $parts[] = $value; } } return implode('/', $parts); }
/** * Create matched controller instance * * @param \Magento\Framework\App\RequestInterface $request * @param array $params * @return \Magento\Framework\App\Action\Action|null */ protected function matchAction(\Magento\Framework\App\RequestInterface $request, array $params) { $moduleFrontName = $this->matchModuleFrontName($request, $params['moduleFrontName']); if (empty($moduleFrontName)) { return null; } /** * Searching router args by module name from route using it as key */ $modules = $this->_routeConfig->getModulesByFrontName($moduleFrontName); if (empty($modules) === true) { return null; } /** * Going through modules to find appropriate controller */ $currentModuleName = null; $actionPath = null; $action = null; $actionInstance = null; $request->setRouteName($this->_routeConfig->getRouteByFrontName($moduleFrontName)); $actionPath = $this->matchActionPath($request, $params['actionPath']); $action = $request->getActionName() ?: ($params['actionName'] ?: $this->_defaultPath->getPart('action')); $this->_checkShouldBeSecure($request, '/' . $moduleFrontName . '/' . $actionPath . '/' . $action); foreach ($modules as $moduleName) { $currentModuleName = $moduleName; $actionClassName = $this->actionList->get($moduleName, $this->pathPrefix, $actionPath, $action); if (!$actionClassName || !is_subclass_of($actionClassName, $this->actionInterface)) { continue; } $actionInstance = $this->actionFactory->create($actionClassName, array('request' => $request)); break; } if (null == $actionInstance) { $actionInstance = $this->getNotFoundAction($currentModuleName, $request); if (is_null($actionInstance)) { return null; } $action = 'noroute'; } // set values only after all the checks are done $request->setModuleName($moduleFrontName); $request->setControllerName($actionPath); $request->setActionName($action); $request->setControllerModule($currentModuleName); if (isset($params['variables'])) { $request->setParams($params['variables']); } return $actionInstance; }