/** * Создает и возвращает экземпляр контролера для заданного маршрута. * Актуальный маршрут берем из Request. * * @param Request $req. * @return object|null экземпляр контролера */ public function getController(Request $req) { $this->request = $req; $nameRedirectRoute = ''; if (!FrameworkRegistry::getLastExecutedController()) { if ($this->request->isLoadingDefaultPage()) { // В случае если впервые загружается Default страница фраймворка, // переключаемся на стартовую страницу приложения: $response = new Response(); $response->redirectToStartPage(); $this->executingController = null; return null; } // получаем имя контролера для текущего маршрута: $controllerName = $this->getControllerName($this->getRouteName()); if (!$controllerName) { // переключаемся на default страницу $this->executingController = $this->getDefaultController(); return $this->executingController; } } else { // получаем имя маршрута для редиректа: if ($this->request->isProgramRedirectRoute()) { $nameRedirectRoute = $this->getRouteName(); // программный редирект } else { // редирект на основе спроектированной табл. маршрутизации (config.xml): $nameRedirectRoute = $this->getRedirectRouteName(); } if (!$nameRedirectRoute) { // редиректа для текущего маршрута не предусмотрено: $this->executingController = null; return null; } $controllerName = $this->getControllerName($nameRedirectRoute); } // получаем экземпляр контролера по его имени $controllerName: $controllerObj = $this->createController($controllerName); //подстраховываемся от циклического вызова одного и //того же маршрута: $uniqueNameRoute = $this->getUniqueNameRoute(); if (isset($this->alreadyCalledRoute[$uniqueNameRoute])) { $this->executingController = null; return null; } $this->alreadyCalledRoute[$uniqueNameRoute] = 1; if ($this->request->isProgramRedirectRoute()) { // отключаем режим программного редиректа: $this->request->offProgramRedirectRoute(); } //иницируем подготовку параметров для выполнения действия контролера: $this->getParametersForAction(); return $controllerObj; }
/** * Редирект на страницу с описанием исключения. */ public final function redirectToExcepPage() { SessionRegistry::getInstance()->putCache('msgExcep', $this->getErrMessage()); $response = new Response(); $response->redirectToExcepPage(); }