Есть ли способ перенаправить браузер из начальной загрузки в Zend Framework? - PullRequest
2 голосов
/ 29 мая 2009

Мне нужно перенаправить в соответствии с некоторыми условиями в файле начальной загрузки.
Это делается ПОСЛЕ того, как фронт-контроллер и маршруты определены.
Как мне это сделать?
(Я знаю, что могу просто использовать заголовок ('Location: ....). Суть в том, что мне нужно использовать Router для построения URL.

Ответы [ 5 ]

3 голосов
/ 22 октября 2010

больше, чем год спустя, я программирую на ZF, и у меня есть решение для вашей проблемы Вот моя функция в начальной загрузке, которая определяет, где пользователь вошел в систему.

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap

{

protected $_front;

(...)

protected function _initViewController() 
{
    (...)

    $this->bootstrap('FrontController');
    $this->_front = $this->getResource('FrontController');

    (...)
}

protected function _initLogado()
{
    $router = $this->_front->getRouter();
    $req = new Zend_Controller_Request_Http();
    $router->route($req);
    $module = $req->getModuleName();

    $auth = Zend_Auth::getInstance();
    if ($auth->hasIdentity()) {
        $this->_view->logado = (array) $auth->getIdentity();
    } else {
        $this->_view->logado = NULL;
        if ($module == 'admin') {
            $response = new Zend_Controller_Response_Http();
            $response->setRedirect('/');
            $this->_front->setResponse($response);
        }
    }
}

}

2 голосов
/ 22 октября 2010

Перенаправление не должно быть в файле начальной загрузки ... Это будет одна ужасная ночь отладки для кодера, который застрянет в вашем коде через несколько лет.

Используйте либо плагин Front Controller, Action Controller Plugin, либо сделайте это в вашем Action Controller. В конечном итоге такого перенаправления следует вообще избегать ...

0 голосов
/ 30 мая 2009

Я бы взял маршрутизатор с фронт-контроллера и вызвал его метод assemble(), а затем использовал бы header():)

С уважением,

Rob ...

0 голосов
/ 30 мая 2009

Вы можете проверить условие метода "routeShutdown" в плагине, а затем использовать $ this-> actionController -> _ helper-> redirector () для перенаправления;)

0 голосов
/ 29 мая 2009

Лучше всего, вероятно, Плагин контроллера

Вы можете добавить хук routeShutdown (), который вызывается после того, как произошла маршрутизация, но до вызова метода действия вашего контроллера. В этом плагине вы можете затем проверить данные запроса или, возможно, искать разрешения в ACL, или просто перенаправить наугад, если вы этого хотите!

Выбор за вами!

РЕДАКТИРОВАТЬ: перечитывая ваш вопрос, похоже, вы даже не интересуетесь маршрутом - используйте routeStartup () в качестве самой ранней точки после начальной загрузки, чтобы ввести ваш код.

...