/**
  * Создает и возвращает экземпляр контролера для заданного маршрута.
  * Актуальный маршрут берем из 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();
 }