如何在Zend中重定向到不同的控制器操作

时间:2013-05-30 10:03:23

标签: php zend-framework zend-auth zend-acl

我正在创建一个简单的网站,用户可以在其中注册,然后登录并添加文字文章。如果没有登录,访问者将拥有访客的角色,并且只能查看文章。我这样做是作为Zend框架1中的练习,因为我刚开始学习Zend。我将创建一个控制器AuthController用于登录,但我想知道如何从IndexController中的indexAction重定向到该控制器中的登录操作。另外,如何使用自定义插件来实现这种访问控制?我该如何调用它?

4 个答案:

答案 0 :(得分:17)

jalpesh和Hasina的答案都很正确。

Jalpesh的示例是对动作助手redirector()的简写调用,默认为gotoSimple()重定向方法,除非他似乎有向后的参数。

//corrected
$this->_helper->redirector($action, $controller);

将更加详细地称为:

$this->getHelper('Redirector')->gotoSimple($action, $controller = null, $module = null, array $params = array());

有几种方法可以使用Redirector action helper,这只是一个非常常见的例子。

Hasina提供的示例是对控制器utility method _redirect()的调用,然后Redirector帮助程序的代码更加有限,但仍然非常有用。

//only accepts a url string as the first arg
//deprecated as of ZF 1.7 still in documentation
$this->_redirect($url, array $options = array());

显然从ZF 1.7开始,有一种新方法不在文档中(在docblock中找到这个位),这是一种优先选择的方法:

//valid as of ZF 1.7, not in documentation
$this->redirect($url, array $options = array());

这两种实用方法都是以下代理:

 Zend_Controller_Action_Helper_Redirector::gotoUrl()

希望这有帮助

答案 1 :(得分:11)

您可以使用以下方法在操作方法中重定向:

$this->redirect('/module/controller/action/');

答案 2 :(得分:2)

如果您使用路线,可以使用$this->getHelper('Redirector')->setGotoRoute(array(), 'routeName');

答案 3 :(得分:0)

我认为这会对你有所帮助

$this->_helper->redirector('controller','action');
通过这种方式你可以调用另一个控制器。