有没有办法从Zend Framework中的引导程序重定向浏览器?

时间:2009-05-29 14:45:53

标签: zend-framework redirect routing

我需要根据bootstrap文件中的某些条件重定向 它是在前控制器和路线定义之后完成的 我该怎么做?
(我知道我可以简单地使用标题('位置:....)关键是我需要使用路由器来构建URL。

5 个答案:

答案 0 :(得分:3)

一年多以后,我正在使用ZF进行编程,我为您的问题找到了这个解决方案。 这是我在bootstrap中的函数,用于确定用户登录的位置。

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);
        }
    }
}

}

答案 1 :(得分:2)

重定向应该不在引导程序文件中......对于编程人员而言,这将是一个糟糕的调试之夜,最终会在几年后陷入你的代码。

使用Front Controller插件,Action Controller插件,或在Action Controller中执行此操作。最终应该完全避免这种重定向......

答案 2 :(得分:0)

最好的方法可能是Controller Plugin

您可以添加在路由发生后调用的routeShutdown()挂钩,但在调用控制器的操作方法之前。在这个插件中,您可以检查请求数据,或者可以在ACL中查找权限,或者只是随意重定向,如果这是您想要的!

选择权在你手中!

编辑:重读你的问题,看起来你甚至对路线不感兴趣 - 使用routeStartup()作为引导注入代码后的最早点。

答案 3 :(得分:0)

我会从前端控制器抓取路由器并调用其assemble()方法,然后使用header():)

此致

...罗布

答案 4 :(得分:0)

您可以在插件中检查“routeShutdown”方法的条件,然后使用$ this-> actionController-> _helper-> redirector()重定向;)