是否对Zend Redirector Action Helper的工作方式有全面的解释?我已经阅读了参考指南,但仍然没有100%清楚。例如:
显然goToSimple()更像是forward(),而不是重定向。这是否意味着它不会将重定向消息发送回浏览器?
如果我想将重定向消息发送回浏览器,我应该使用哪种重定向器方法?
有没有办法获得forward()类型的行为,而无需重新执行Action Helpers的init()方法?
我在实施ACL时出现了这个问题。我有一个ACL Action Helper,它的init()方法添加了'current'这个角色。当我使用重定向器的goToSimple()时,我收到一个错误,说该角色已经注册。我可以使用if (!$acl->hasRole('current'))
但是我认为最好不要首先重新执行帮助程序的init()。
答案 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()方法;但是,仅用于检查而不是转发。