19

我想知道两者之间的区别:

$this->forward("module", "action");

$this->redirect("module/action");

我的第一个猜测是一个暗示一个新的请求,而另一个不是,但我不确定。

4

1 回答 1

40

在某些情况下,动作执行通过请求新的动作执行而结束。例如,在POST请求中处理表单提交的操作通常会在更新数据库后重定向到另一个操作。另一个例子是动作别名:索引动作通常是一种显示列表的方式,实际上是转发到列表动作。

动作类提供了两种方法来执行另一个动作:

如果操作将调用转发到另一个操作:

$this->forward('otherModule', 'index');

如果操作导致 Web 重定向:

$this->redirect('otherModule/index');
$this->redirect('http://www.google.com/');

重定向或转发之间的选择有时很棘手。要选择最佳解决方案,请记住转发是应用程序内部的,对用户是透明的。就用户而言,显示的 URL 与请求的 URL 相同。相反,重定向是发送给用户浏览器的消息,涉及来自浏览器的新请求以及最终生成的 URL 的更改。

如果从带有 的提交表单中调用该操作method="post",则应始终执行重定向。主要优点是如果用户刷新结果页面,表单将不会再次提交;此外,后退按钮通过显示表单而不是询问用户是否要重新提交POST请求的警报按预期工作。

于 2009-05-29T15:29:00.273 回答