2013-10-17 53 views
4

我以前用来总是写$this->load->view()加载视图。我注意到有一个问题,尤其是当涉及到地址栏中的重新提交和URL时。相反,我开始使用redirect('controller/function','refresh')来实现相同的目的。我的问题是:这是一个好方法,还是令人不悦?我觉得我的代码在这种方式上更加顺畅,但我肯定想知道这是否会在以后出现任何副作用。Codeigniter重定向与加载视图

例如用例:

$id = $this->user_model->buildAccount($name, $email); 

if(isset($id) && $id != '') { 
    $this->session->set_userdata('id', $id); 
    redirect('users/details'); 
} else { 
    redirect('members/'); 
} 
+0

http://stackoverflow.com/a/32866456/412591 –

回答

3

当谈到CI你采取任何方法是好的,恕我直言,你的做法是就好了。在上面的代码中,您在创建会话后重定向用户,您还应该检查​​函数中会话的有效性。无论如何,你必须致电load->view()加载一个视图,无论它在任何功能。因此,加载视图的位置并不重要。

+0

是我不经常检查会话和令牌,以确保该网站的所有部分的认证接入。你很高兴分享你的意见。感谢队友 – spacemonkey

+0

Happie帮忙:D。考虑接受答案,如果它帮助你。 @spacemonkey –

1

您需要使用PRG - Post/Redirect/Get模式。 重定向和加载视图不一样,如果你有页面内容中的表单。

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。用户代理(例如网络浏览器)通过具有此代码的响应被邀请,以对位置字段中指定的新URL进行第二次(否则相同)请求。

HTTP 1.0与HTTP 302或HTTP 1.1与HTTP 303(“其他”)响应代码,以确保在这种情况下,Web用户的浏览器可以安全地刷新服务器响应,而不会导致初始HTTP POST请求重新提交。

Source