ZendFramework Как в модуле задать не только шаблон, но и роутинг

donpadlo

Новичок
Доброе!

В модуле добавил следующее преключение шаблона:

Код:
    public function init(ModuleManager $manager){       
        $eventManager = $manager->getEventManager();
        $sharedEventManager = $eventManager->getSharedManager();
        $sharedEventManager->attach(__NAMESPACE__, 'dispatch', [$this, 'onDispatch'], 100);
    }   
    public function onDispatch(MvcEvent $event){           
        if (Auth::GetCookies("randomid4")==false){           
                  $viewModel = $event->getViewModel();                 
                  $viewModel->setTemplate('layout/login'); 
              }       
        }
    }
Соответственно отображает файл layout/login.phtml если нет печеньки randomid4, НО! мне нужно чтобы не только шаблон был переадресован, но и все контроллеры были переадресованы на application/user/login. Иначе, приходится в контроллерах прописывать конструкцию вида:

Код:
    public function aboutAction(){
           if (Auth::GetCookies("randomid4")==false){           
            $viewModel = new ViewModel();
            $viewModel->setTemplate('application/user/login');                       
           };       
        return $viewModel;       
    }
Как это проще всего реализовать? Премного благодарен за внимание..
 

WMix

герр M:)ller
Партнер клуба

donpadlo

Новичок
В конечном итоге решил вопрос так:

Код:
    public function init(ModuleManager $manager){       
        // Получаем менеджер событий.
        $eventManager = $manager->getEventManager();
        $sharedEventManager = $eventManager->getSharedManager();
        // Регистрируем метод-обработчик.           
        $sharedEventManager->attach(__NAMESPACE__, 'dispatch', [$this, 'onDispatch'], 100);
        
    }   
    // Обработчик события.
    public function onDispatch(MvcEvent $event){       
        if (Auth::GetCookies("randomid4")==false){           
            // Получаем контроллер, к которому был отправлен HTTP-запрос.
              $controller = $event->getTarget();
              // Получаем полностью определенное имя класса контроллера.
              $controllerClass = get_class($controller);
              // Получаем имя модуля контроллера.
              $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));
              $viewModel = $event->getViewModel();                 
              $viewModel->setTemplate('layout/login');                                                   
              $uri = $event->getRequest()->getUri();             
              $patch = $uri->getPath();             
                if ($patch!="/user/login"){
                      $uri->setPath('/user/login');
                      $response=$event->getResponse();
                      $response->getHeaders()->addHeaderLine('Location', $uri);
                      $response->setStatusCode(301);
                      $response->sendHeaders();
                    return $response;
                };               
        }
    }
 
Сверху