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