代码之家  ›  专栏  ›  技术社区  ›  Bite code

symfony中的重定向和转发有什么区别?

  •  18
  • Bite code  · 技术社区  · 15 年前

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

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

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

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

    1 回复  |  直到 11 年前
        1
  •  37
  •   dialogik    11 年前

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

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

    如果操作将呼叫转发到另一个操作:

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

    如果操作导致Web重定向:

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

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

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