可能重复:
What is the difference between redirect and forward in Zend framework
我是zend框架的新手,当我尝试在控制器中使用foward,redirect,setViewRender时,他们的不同之处是什么?
答案 0 :(得分:2)
正如official docs所说:
_forward($action, $controller = null, $module = null, array $params = null):
执行其他操作。如果在preDispatch()中调用,则
将跳过当前请求的操作以支持新操作。
否则,在处理当前操作后,操作
_forward()中请求的将被执行。_redirect($url, array $options = array()):
重定向到其他位置。此方法采用URL和一组可选选项。通过
默认情况下,它执行HTTP 302重定向。Read more要更好地理解它。
答案 1 :(得分:0)
我非常确定重定向会将您重定向到特定页面/控制器,因此会经历所有预览过程,包括如果您可以查看该页面,setViewRender将只输出您选择的视图并忽略所有控制器等处理的东西。 (我暂时没用过zend)
答案 2 :(得分:0)
_redirect会创建一个全新的http请求,而_forward只会转发请求。我在zend_registry中设置变量时意识到这一点,这听起来有点偏离轨道但是当你使用_request时,所有的请求变量和头文件以及注册表变量都完全重置,而在_forward的情况下,它只是转发所有这些东西。这就像您之前提供的信息以及_forward的更多信息一样。
对于setViewRenderer我真的很喜欢这个想法,我的意思是这就像依赖注入一样。您实际上不需要具有默认视图,您可以为给定操作提供新视图。如果你研究this,我认为你会得到最好的答案。
答案 3 :(得分:0)
_forward
是内部重定向。在_redirect
发送一个标题告诉客户端浏览器转到其他URL时,_forward告诉Dispatcher在其他地方内部重定向请求。
如果您考虑正常的调度顺序:
preDispatch()
someAction()
anotherAction()
postDispatch()
在该进程中的任何一点调用_forward
都将导致以下步骤无法执行。因此,如果您在_forward
中致电preDispatch()
,则不会调用someAction()
,依此类推。如果_forward()
中的someAction()
并且您正在使用viewRenderer操作助手来呈现视图(您让框架选择要呈现的视图脚本),则不会在{{1中呈现视图脚本}}
当请求转发到新的控制器/模块时,整个调度过程将在那里重复。
注意:强>
如果你在someAction()
内转发someAction()
,你必须这样做
anotherAction()
您应该向return $this->_forward('another');
添加return
,否则您的当前操作将继续执行,然后转发给其他操作。
另请注意,将呈现的视图将为$this->_forward()
在进行重定向时,ZF会指示浏览器加载 http://example.com/controller-name/action-name ,因为another.phtml
发送标题,这意味着你创建一个新的HTTP请求并使用它完成整个调度过程。
最后要在动作中呈现某个视图,请使用_redirect()
动作助手:
viewRenderer