我以前常常写$this->load->view()
来加载视图。我注意到存在问题,特别是在重新提交和地址栏中的URL时。相反,我开始使用redirect('controller/function','refresh')
来实现同样的目的。我的问题是:这是一个好的方法还是不赞成?我觉得我的代码更顺畅,但我当然想知道以后是否有任何副作用。
e.g。用例:
$id = $this->user_model->buildAccount($name, $email);
if(isset($id) && $id != '') {
$this->session->set_userdata('id', $id);
redirect('users/details');
} else {
redirect('members/');
}
答案 0 :(得分:3)
说到CI
你采取的任何方法都没关系,imho,你的方法很好。在上面的代码中,您在创建会话后重定向用户,还应检查user/details
函数中会话的有效性。无论如何,您必须调用load->view()
来加载视图,无论是在任何函数中。因此,加载视图并不重要。
答案 1 :(得分: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响应还将在位置标题字段中提供URL。通过具有该代码的响应来邀请用户代理(例如,web浏览器),以对位置字段中指定的新URL做出第二个(否则相同的)请求。
带有HTTP 302的HTTP 1.0或带有HTTP 303(“请参阅其他”)响应代码的HTTP 1.1,以确保在这种情况下,Web用户的浏览器可以安全地刷新服务器响应,而不会导致重新提交初始HTTP POST请求