1

是否有关于 Zend Redirector Action Helper 如何工作的全面解释?我已阅读参考指南,但仍不是 100% 清楚。例如:

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

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

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

这个问题是在我实现 ACL 时出现的。我有一个 ACL 操作助手,它的 init() 方法添加了角色“当前”。当我使用重定向器的 goToSimple() 时,我收到一条错误消息,指出该角色已注册。我可以使用if (!$acl->hasRole('current')),但是我认为最好不要首先重新执行助手的 init() 。

4

1 回答 1

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() 方法;但是,仅用于检查而不是转发。

于 2011-08-05T14:27:25.403 回答