Zend框架中的redirect和转发有什么区别

Zend框架中redirect和转发有什么区别?

什么时候应该使用redirect,什么时候应该使用forward?

_forward()所有内容转发给另一个控制器操作,而_redirect()发送一个头,这意味着您创build一个新的HTTP请求,并通过整个调度过程。

例如,如果您调用http://example.com/foo/bar,;则会调用foo控制器和bar动作。 如果您在bar动作内部转发到baz动作,例如在同一个请求中,浏览器仍然在同一个URL上,而在做redirect时,ZF会指示浏览器加载http://example.com/ foo / baz

本质上, _forward()

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

_redirect()

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

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

看到这些:

想象一下,你在办公室里打个电话。 有人想谈谈销售。 如果你说“请致电123456”并挂断,这是redirect 。 如果你说“等一下”,把电话转给他们,这是前进的 。 ;)

如果你希望URL保持不变,你可以使用_forward() ,但是要注意 ,这意味着你所使用的任何基类控制器都被调用两次。

这可能看起来很明显或微不足道,但如果没有记住的话,真的可能会搞砸你的应用程序devise,因为直观地理解stream程是一个请求调用一个控制器实例。 例如,这意味着请求范围单身人士必须声明为static ,或_forward()将打破他们。

我猜想一个redirect用一个新的URL向浏览器发送一个301/302,而一个转发只是“转发”到一个不同的控制器动作的内部,但保持相同的URL,所以浏览器不知道任何不同。

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

2-forward将执行stream程更改为新的请求,而不必再次进入调度过程

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

而前锋将保持在同一页面,但将保持不变。 你可以看到这是一个函数调用。 你的意见将像往常一样加载。