Zend Redirector Action Helper的解释

时间:2011-08-04 22:51:03

标签: zend-framework zend-controller

是否对Zend Redirector Action Helper的工作方式有全面的解释?我已经阅读了参考指南,但仍然没有100%清楚。例如:

  • 显然goToSimple()更像是forward(),而不是重定向。这是否意味着它不会将重定向消息发送回浏览器?

  • 如果我想将重定向消息发送回浏览器,我应该使用哪种重定向器方法?

  • 有没有办法获得forward()类型的行为,而无需重新执行Action Helpers的init()方法?

我在实施ACL时出现了这个问题。我有一个ACL Action Helper,它的init()方法添加了'current'这个角色。当我使用重定向器的goToSimple()时,我收到一个错误,说该角色已经注册。我可以使用if (!$acl->hasRole('current'))但是我认为最好不要首先重新执行帮助程序的init()。

1 个答案:

答案 0 :(得分:1)

关于重定向器的一些快速说明不太全面。

重定向程序比常规PHP重定向更多一些,您可以在脚本中使用header('Location: www.domain.com/new/location') - 后跟exit()

如果你看一下 Zend_Controller_Action_Helper_Redirector ,它最终会完全一样;如果$ _exit == true(默认),所有内容都会导致redirectAndExit()调用header()并以exit()调用结束。但是它会正确终止框架,主要是会话,如果有的话。

重定向器在内部不转发它会发回默认的302代码,除非您使用setCode()设置了另一个代码。

方法gotoRoute()gotoSimple()为您汇总目标网址并致电redirectAndExit(),但仅限于$_exit==true。或者你可以使用他们的兄弟gotoRouteAndExit()gotoSimpleAndExit()立刻退出。 gotoSimple方法传递给setGotoSimple,它使用一些方法为你组合URL。

在你的情况下,我只能假设setGotoSimple方法和其中一个方法调用目标控制器并启动init()方法;但是,仅用于检查而不是转发。