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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2011-07-24
      相关资源
      最近更新 更多