Zend框架中重定向和转发有什么区别

时间:2010-03-31 07:49:24

标签: php zend-framework

Zend框架中重定向和转发有什么区别?

什么时候应该使用重定向?什么时候应该使用前进?

6 个答案:

答案 0 :(得分:68)

想象一下,你在办公室接到电话。有人想和销售人员谈谈。如果你说“请拨打123456”并挂机,这是重定向。如果您说“等一下”并将呼叫转接给他们,则这是转发。 ;)

答案 1 :(得分:52)

_forward()只需将转发所有内容转发给另一个控制器操作,而_redirect()发送一个标头,这意味着您创建一个新的HTTP请求并使用它完成整个调度过程。

例如,如果您调用 http://example.com/foo/bar ,则会调用foo控制器和bar操作。如果您将bar操作转发到baz操作,例如在同一个请求中,浏览器仍然在同一个URL上,而在进行重定向时,ZF会指示浏览器加载 http://example.com/foo/baz

基本上,_forward()

$request->setActionName($action)
        ->setDispatched(false);

_redirect()确实

$this->_helper->redirector->gotoUrl($url, $options);

当我想阻止重新加载页面导致重新发布表单数据时,我通常会进行重定向。

见这些:

答案 2 :(得分:4)

对于希望URL保持不变的情况,您可以使用 _forward() - 虽然要注意,但它确实意味着您使用的任何基本控制器类都是两次打电话。

这看似显而易见或微不足道,但如果不记住,可以真正搞砸你的应用程序设计,因为直观的流程理解是一个请求调用一个控制器实例。例如。它表示请求范围的单身人士声明为static,或 _forward()会将其分解。

答案 3 :(得分:2)

我猜想重定向会使用新的URL将301/302发送回浏览器,而转发只是将请求“转发”到内部的其他控制器操作,但保持URL相同,因此浏览器不会知道任何不同。

答案 4 :(得分:1)

1-redirect创建一个带有header()信息的新响应[302 Found或301 ==永久移动],它将再次进入调度周期

2-forward将执行流程更改为该新请求,而无需再次重新进入调度流程

答案 5 :(得分:0)

重定向操作结束当前页面进程并重定向到另一个进程。当浏览器收到重定向时,所有上下文都将更改(新控制器/操作)。它连接到新的URL

虽然转发将保持在同一页面上,但会保持上下文不变。您可以将其视为函数调用。您的观点将照常加载。