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