我想知道:
之间的区别$this->forward("module", "action");
和
$this->redirect("module/action");
我的第一个猜测是,一个意味着一个新的请求而另一个没有,但我不确定。
答案 0 :(得分:37)
在某些情况下,通过请求新的操作执行来结束操作。例如,处理POST
请求中的表单提交的操作通常会在更新数据库后重定向到另一个操作。另一个例子是动作别名:索引动作通常是一种显示列表的方式,实际上是转发到列表动作。
action类提供了两种执行另一个操作的方法:
如果操作将呼叫转发给其他操作:
$this->forward('otherModule', 'index');
如果操作导致Web重定向:
$this->redirect('otherModule/index');
$this->redirect('http://www.google.com/');
重定向或转发之间的选择有时很棘手。要选择最佳解决方案,请记住,转发是应用程序的内部解决方案,对用户是透明的。就用户而言,显示的URL与请求的URL相同。相反,重定向是向用户浏览器发送的消息,涉及来自它的新请求以及最终结果URL的更改。
如果从包含method="post"
的已提交表单调用操作,则应始终执行重定向。主要优点是,如果用户刷新生成的页面,则不会再次提交表单;此外,后退按钮按预期显示表单,而不是警告,询问用户是否要重新提交POST
请求。