繁体   English   中英

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

[英]What is the difference between redirect and forward in Zend framework

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

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

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

_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);

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

看到这些:

您可以使用_forward()来处理您希望URL保持不变的情况 - 但要注意 ,它确实意味着您使用的任何基本控制器类被调用两次。

这似乎是显而易见或微不足道的,但如果不记住,可以真正搞砸你的应用程序设计,因为直观的流程理解是一个请求调用一个控制器实例。 例如,它意味着请求范围单例必须声明为static ,否则_forward()将打破它们。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM