【问题标题】:An explanation of the Zend Redirector Action HelperZend Redirector Action Helper的解释
【发布时间】:2011-08-04 22:51:02
【问题描述】:
是否有关于 Zend Redirector Action Helper 如何工作的全面解释?我已阅读参考指南,但仍不是 100% 清楚。例如:
显然 goToSimple() 更像是一个 forward(),而不是一个重定向。这是否意味着它不会将重定向消息发送回浏览器?
如果我想将重定向消息发送回浏览器,我应该使用哪种 Redirector 方法?
有没有办法获得 forward() 类型的行为,而无需重新执行 Action Helpers 的 init() 方法?
我在实施 ACL 时出现了这个问题。我有一个 ACL 操作助手,它的 init() 方法添加了角色“当前”。当我使用重定向器的 goToSimple() 时,我收到一条错误消息,指出该角色已注册。我可以使用if (!$acl->hasRole('current')),但我认为最好不要一开始就重新执行助手的 init()。
【问题讨论】:
标签:
zend-framework
zend-controller
【解决方案1】:
不太全面,只是关于重定向器的一些快速说明。
重定向器的功能比常规 PHP 重定向要多一点,您可以在脚本中使用 header('Location: www.domain.com/new/location') —— 后跟 exit()。
如果您查看 Zend_Controller_Action_Helper_Redirector,它最终的作用完全相同;如果 $_exit==true (默认)一切都导致redirectAndExit() 调用header() 并以exit() 调用结束。但是,它会正确终止框架,主要是会话(如果有)。
重定向器不会在内部转发,它会返回默认的 302 代码,除非您使用 setCode() 设置了另一个代码。
方法gotoRoute() 和gotoSimple() 为您组装目标URL 并调用redirectAndExit(),但前提是$_exit==true。或者您可以使用他们的兄弟gotoRouteAndExit() 和gotoSimpleAndExit() 将立即退出。 gotoSimple 方法传递给 setGotoSimple,它使用一些方法为您组装 URL。
在您的情况下,我只能假设 setGotoSimple 方法和其中的一种方法调用目标控制器并启动 init() 方法;但是,仅用于检查而不是转发。