ZendFramework Подмена действия контроллера

Professor

Новичок
Привет всем.
Пишу авторизацию в ZF2, возникла такая проблема:
Проверку на авторизацию пользователя вынес в главный контроллер от которого наследую все остальные контроллеры.
В onDispatch проверяю авторизован ли пользователь или нет.
Если не авторизован, то хотелось бы не редиректить, а подставлять контент и лайаут для авторизации пользователя.

Если в onDispatch делать просто
PHP:
return $this->forward()->dispatch("Backend\\Controller\\Auth", array('action' => 'login'));
То отрабатывает и первый action и второй.
Как сделать что бы отрабатывал только тот который я указал в forward?
Может сам подход не верен?

Есть одно ограничений. В проекте есть несколько модулей которые должны использовать разную авторизацию.
 

WMix

герр M:)ller
Партнер клуба
мне почемуто не нравится твое решение, ну те авторизацию встраивают через Authentication, добавляют acl - правила доступа
дальше на уровне acl если доступ на ресурс запрещен создается исключение. а дальше можно при появлении данного исключения вызывать правильный контроллер
 

Professor

Новичок
Да я вроде так и делаю.
Только вместо того что бы выбросить исключение, я почему то думал перенаправить на другой контроллер.
Сделал я так

PHP:
    function onDispatch(\Zend\Mvc\MvcEvent $e){
        $actionResponse = $controler->forward()->dispatch("Backend\\Controller\\Auth", ['action' => 'login']);
        $e->setResult($actionResponse);

        return $actionResponse;
    }
Так все работает. (тут показал только как из onDispatch подменить вывод действия)
Но наверно исключением было бы более правильно.
 

WMix

герр M:)ller
Партнер клуба
PHP:
function onDispatch(\Zend\Mvc\MvcEvent $e){
  $actionResponse = $e->getResponse();
  $actionResponse->headers()->addHeaderLine('Location', "login");
  $actionResponse->setStatusCode(302);
  $actionResponse->sendHeaders();
}
 
  • Like
Реакции: VEV
Сверху