Zend Framework 3 перенаправление страницы из модуля приложения
Задача: если не установлены куки, перенаправить пользователя на страницу авторизации, вне зависимости от первоначальной точки входа в приложение
Решение: про первой инициализации модуля, создаем событие onDispath, в котором смотрим куки, и если они нас не устраивают — меняем шаблон и перенаправляем на другой контроллер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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; }; } } |