Php init()方法中的Zend控制器重定向

Php init()方法中的Zend控制器重定向,php,zend-framework,redirect,Php,Zend Framework,Redirect,我试过Firefox,它告诉我: Firefox检测到服务器正在以一种永远不会完成的方式重定向对此地址的请求。 但当我将重定向器放在init()方法之外时,它就可以工作了 class IndexController extends Zend_Controller_Action{ public function init(){ if(!isset($_SESSION['administrator'])){ $this->_helper->

我试过Firefox,它告诉我:

Firefox检测到服务器正在以一种永远不会完成的方式重定向对此地址的请求。

但当我将重定向器放在init()方法之外时,它就可以工作了

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);
        }
    }
}
有人能帮我吗

编辑:


我不想重复“重定向代码”,因为在同一个控制器中还有许多其他操作需要检查权限。

问题是,在
索引/登录
上,您还运行
init()
方法,检测用户不是管理员,然后再次尝试将其重定向到
索引/登录
,它将再次运行
init()
方法,检测到他仍然不是管理员。。。等等因此,无限重定向循环

因此,在您的
init()
中,您可以首先检查是否尝试调用
登录
操作,只有在没有的情况下,才检查管理员权限并重定向到
索引/登录

在您的具体案例中,您可能希望更改
init()
方法,如下所示:

public function indexAction(){
    if(!isset($_SESSION['administrator'])){
        $this->_helper->redirector->gotoRouteAndExit(array('controller' => 'index', 'module' => 'cp', 'action' => 'login'), null,!0,!0);
    }
}

这将
login
操作排除在检查管理员权限和重定向之外,从而打破无限重定向循环。

问题是,在
index/login
上,您还运行
init()
方法,检测用户不是管理员,然后再次尝试将其重定向到
index/login
,它将再次运行
init()
方法,检测到他仍然不是管理员。。。等等因此,无限重定向循环

因此,在您的
init()
中,您可以首先检查是否尝试调用
登录
操作,只有在没有的情况下,才检查管理员权限并重定向到
索引/登录

在您的具体案例中,您可能希望更改
init()
方法,如下所示:

public function indexAction(){
    if(!isset($_SESSION['administrator'])){
        $this->_helper->redirector->gotoRouteAndExit(array('controller' => 'index', 'module' => 'cp', 'action' => 'login'), null,!0,!0);
    }
}

这将
login
操作排除在检查管理员权限和重定向之外,从而打破无限重定向循环。

问题是,在
index/login
上,您还运行
init()
方法,检测用户不是管理员,然后再次尝试将其重定向到
index/login
,它将再次运行
init()
方法,检测到他仍然不是管理员。。。等等因此,无限重定向循环

因此,在您的
init()
中,您可以首先检查是否尝试调用
登录
操作,只有在没有的情况下,才检查管理员权限并重定向到
索引/登录

在您的具体案例中,您可能希望更改
init()
方法,如下所示:

public function indexAction(){
    if(!isset($_SESSION['administrator'])){
        $this->_helper->redirector->gotoRouteAndExit(array('controller' => 'index', 'module' => 'cp', 'action' => 'login'), null,!0,!0);
    }
}

这将
login
操作排除在检查管理员权限和重定向之外,从而打破无限重定向循环。

问题是,在
index/login
上,您还运行
init()
方法,检测用户不是管理员,然后再次尝试将其重定向到
index/login
,它将再次运行
init()
方法,检测到他仍然不是管理员。。。等等因此,无限重定向循环

因此,在您的
init()
中,您可以首先检查是否尝试调用
登录
操作,只有在没有的情况下,才检查管理员权限并重定向到
索引/登录

在您的具体案例中,您可能希望更改
init()
方法,如下所示:

public function indexAction(){
    if(!isset($_SESSION['administrator'])){
        $this->_helper->redirector->gotoRouteAndExit(array('controller' => 'index', 'module' => 'cp', 'action' => 'login'), null,!0,!0);
    }
}
这将
login
操作从检查管理员权限和重定向中排除,从而打破无限重定向循环。

问题是,
init()
函数将始终在任何控制器中首先运行

因此,当您执行重定向时,
init()

因此,在控制器的
index Action
中执行您已经执行的替换操作并重定向它。

问题是,
init()
函数始终在任何控制器中首先运行

因此,当您执行重定向时,
init()

因此,在控制器的
index Action
中执行您已经执行的替换操作并重定向它。

问题是,
init()
函数始终在任何控制器中首先运行

因此,当您执行重定向时,
init()

因此,在控制器的
index Action
中执行您已经执行的替换操作并重定向它。

问题是,
init()
函数始终在任何控制器中首先运行

因此,当您执行重定向时,
init()


因此,执行您已经完成的替换操作,并在控制器的
索引操作中重定向它。

我认为这对我的项目不是一个好的解决方案,但无论如何,谢谢!对不起,我英语说得不好。我认为这对我的项目来说不是一个好的解决方案,但无论如何,谢谢!对不起,我英语说得不好。我认为这对我的项目来说不是一个好的解决方案,但无论如何,谢谢!对不起,我英语说得不好。我认为这对我的项目来说不是一个好的解决方案,但无论如何,谢谢!对不起,我英语说得不好。@Dragon Warrior
init()
不是函数。它是类的方法。哦,真的,我是在指出这样一个事实:我们确实是以
公共函数init()
的形式编写它的,不是吗?@Dragon Warrior
init()
不是函数。它是类的一种方法。哦,实际上,我是在指出我们确实是以
public function init()
d的形式编写它的