class IndexController extends Zend_Controller_Action{
public function init(){
if(!isset($_SESSION['administrator'])){
$this->_helper->redirector->gotoRouteAndExit(array('controller' => 'index', 'module' => 'cp', 'action' => 'login'), null,!0,!0);
}
}
}
我试过Firefox,它告诉我:
Firefox检测到服务器正在以永远无法完成的方式重定向此地址的请求。
但是当我将重定向器放在init()方法之外时,它可以工作。
public function indexAction(){
if(!isset($_SESSION['administrator'])){
$this->_helper->redirector->gotoRouteAndExit(array('controller' => 'index', 'module' => 'cp', 'action' => 'login'), null,!0,!0);
}
}
任何人都可以帮助我吗?
修改
我不想重复“重定向代码”,因为在同一个控制器中还需要检查许多其他操作。
答案 0 :(得分:2)
问题是,在index/login
上,您还运行init()
方法,检测到该用户不是管理员,并尝试再次将他重定向到index/login
,这将再次运行init()
方法,检测到他仍然不是管理员......依此类推。因此无限重定向循环。
因此,在您的init()
中,您可以先检查是否要尝试拨打login
操作,否则,请检查管理员权限并重定向到index/login
。
在具体案例中,您可能希望更改init()
方法,如下所示:
public function init(){
if ($this->getRequest()->getActionName() !== 'login' && !isset($_SESSION['administrator'])){
$this->_helper->redirector->gotoRouteAndExit(array('controller' => 'index', 'module' => 'cp', 'action' => 'login'), null,!0,!0);
}
}
这排除了检查管理员权限和重定向的login
操作,打破了无限重定向循环。
答案 1 :(得分:1)
问题是,init()
函数将始终在任何控制器中运行,
所以当你进行重定向是init()
时,它必须重定向到自身,这将在你的情况下创建无限循环,所以它将保持重定向到自身,如“BluePsyduck”建议。
您可以使用已完成的备用内容并将其重定向到控制器的index Action
中。