Exemplo n.º 1
0
 /**
  * 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);
 }
Exemplo n.º 2
0
 /**
  * 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;
 }
Exemplo n.º 3
0
 public function testMatchUseDefaultPath()
 {
     // Test Data
     $actionInstance = 'action instance';
     $moduleFrontName = 'module front name';
     $actionPath = 'action path';
     $actionName = 'action name';
     $actionClassName = 'Magento\\Cms\\Controller\\Index\\Index';
     $moduleName = 'module name';
     $moduleList = [$moduleName];
     // Stubs
     $defaultReturnMap = [['module', $moduleFrontName], ['controller', $actionPath], ['action', $actionName]];
     $this->defaultPathMock->expects($this->any())->method('getPart')->willReturnMap($defaultReturnMap);
     $this->routeConfigMock->expects($this->any())->method('getModulesByFrontName')->willReturn($moduleList);
     $this->appStateMock->expects($this->any())->method('isInstalled')->willReturn(false);
     $this->actionListMock->expects($this->any())->method('get')->willReturn($actionClassName);
     $this->actionFactoryMock->expects($this->any())->method('create')->willReturn($actionInstance);
     // Expectations and Test
     $this->requestExpects('setModuleName', $moduleFrontName)->requestExpects('setControllerName', $actionPath)->requestExpects('setActionName', $actionName)->requestExpects('setControllerModule', $moduleName);
     $this->assertSame($actionInstance, $this->model->match($this->requestMock));
 }