Codeigniter何时使用redirect()以及何时使用$ this-> load->视图

时间:2010-11-26 00:38:56

标签: php codeigniter http-redirect

我对Codeigniter相当新,我想知道一些Codeigniter最佳实践。我应该何时使用redirect()与使用

$this->load->view

似乎当我使用redirect()时,$this->session->set_flashdata的工作方式应该如此,但是当我使用时

$this->load->view

在收到其他请求后会显示该消息。

5 个答案:

答案 0 :(得分:6)

我认为你真的回答了自己的问题。

当另一页顶部的简单Flash消息是适当的响应时,使用redirect(),当您提供整页的反馈时,请使用$ this-> load-> view()传入的请求可能是。

因此,例如,当新用户注册时,“成功”页面将是加载的视图,并且可能当用户在其帐户中编辑某些内容时,在同一页面上的闪存消息“已保存更改”或类似内容就足够了。

答案 1 :(得分:5)

重定向对于其他两个常见问题也很有用:

  • 移动您应用中的资源(并且您希望客户端记住新URI)
  • 将表单作为防止后退按钮rePOSTs的一步后发布

答案 2 :(得分:4)

您的观察是正确的,无论何时创建一些flashdata,它都只有时间可用。这是因为flashdata只是session的一种特殊类型,可以在下次请求时使用,在下一次请求后,它会自动删除。您不必处理它的删除。

可以使用以下代码进行测试:

$this->session->set_flashdata( 'test', 'testing' );
echo $this->session->flashdata( 'test' );

什么都不打印。但现在下次执行以下代码:

echo $this->session->flashdata( 'test' );

您将找到所需的输出。再做一次不会给出任何输出。这就是他们的工作方式。有关详情,请参阅http://codeigniter.com/user_guide/libraries/sessions.html

中的 Flashdata 部分

对于当前页面,您不需要flashdata只将数据传递给视图。这是代码:

$data['test'] = 'testing';
$this->load->view('sample_view', $data);

底线是flashdataredirect()一起使用,对于视图,您应该传递变量。希望这有帮助!

答案 3 :(得分:1)

这很简单。你希望用户使用什么网址?如果它们在url1上并将数据发布回url1并且你只是加载一个不同的视图,它们仍将在url1上。如果你重定向到url2,他们将转到url2。

答案 4 :(得分:1)

您需要使用PRG - 发布/重定向/获取模式。 如果您在页面内容中包含该表单,则重定向和加载视图不会相同。

Scenario:

有一个视图,view_1带有表单,可以从帐户中扣款。在view_1中提交表单后,您希望跳转到view_2并显示成功消息,并且您有两个选项可以实现相同的目标。 1.使用成功消息加载view_2或2.使用闪存数据携带成功消息重定向到view_2。

选项1:使用成功消息加载view_2 当您提交表单并刷新时,它将导致重新提交并导致从帐户中多次扣款,但情况并非如此。你也可以看到提示弹出的信息"确认表格重新提交"。

选项2:这是正确的答案 PRG

PRG - 发布/重定向/获取 PRG是一种Web开发设计模式,可以防止一些重复的表单提交,这意味着,提交表单(view_1) - >重定向 - >获取(view_2)

Under the hood

重定向状态代码 - 使用HTTP 302的HTTP 1.0或使用HTTP 303的HTTP 1.1

带有重定向状态代码的HTTP响应还将在位置标题字段中提供URL。通过具有该代码的响应来邀请用户代理(例如,web浏览器),以对位置字段中指定的新URL做出第二个(否则相同的)请求。

重定向状态代码是为了确保在这种情况下,Web用户的浏览器可以安全地刷新服务器响应,而不会导致重新提交初始HTTP POST请求。

Source

Double Submit Problem

Double Submit Problem

Post/Redirect/Get Solution

Post/Redirect/Get Solution