Php Codeigniter何时使用重定向()以及何时使用$this->;负载->;看法
我对Codeigniter还比较陌生,我想知道一些Codeigniter的最佳实践。我应该在什么时候使用Php Codeigniter何时使用重定向()以及何时使用$this->;负载->;看法,php,codeigniter,http-redirect,Php,Codeigniter,Http Redirect,我对Codeigniter还比较陌生,我想知道一些Codeigniter的最佳实践。我应该在什么时候使用redirect()而不是使用 $this->load->view 似乎当我使用redirect()时,$this->session->set\u flashdata的工作原理与我使用 $this->load->view 该消息在附加请求后显示 我想你真的回答了你自己的问题 使用redirect()当另一个页面顶部的简单flash消息是一个合适的响应时,在为任何传入
redirect()
而不是使用
$this->load->view
似乎当我使用redirect()
时,$this->session->set\u flashdata
的工作原理与我使用
$this->load->view
该消息在附加请求后显示 我想你真的回答了你自己的问题 使用redirect()当另一个页面顶部的简单flash消息是一个合适的响应时,在为任何传入请求提供整个页面的反馈时,使用$this->load->view()
因此,例如,当一个新用户注册“成功”页面时,该页面将是一个加载的视图,并且当用户在其帐户中编辑某个内容时,在同一页面上显示一条“已保存更改”或类似内容就足够了。重定向对于其他两个常见问题也很有用:
- 移动应用程序中的资源时(并且您希望客户端记住新URI)
- 发布表单后,作为防止返回按钮重新发布的一个步骤
这很简单。您希望用户位于哪个url上?如果它们位于url1上,并将数据发布回url1,而您只是加载了一个不同的视图,那么它们仍然位于url1上。如果您重定向到url2,它们将转到url2。您的观察是正确的,无论何时创建一些
flashdata
,它都只在特定时间可用。这是因为flashdata
只是一种特殊类型的会话
,它将在下一次请求时为您提供,并且在下一次请求后它将自动删除。你不必注意它的删除
这可以通过以下代码进行测试:
$this->session->set_flashdata( 'test', 'testing' );
echo $this->session->flashdata( 'test' );
$data['test'] = 'testing';
$this->load->view('sample_view', $data);
不会打印任何内容。但现在,下次执行以下代码:
echo $this->session->flashdata( 'test' );
您将找到所需的输出。再做一次不会有任何结果。这就是他们的工作方式。有关详细信息,请查看中的Flashdata部分
对于当前页面,您不需要flashdata
,只需将数据传递给视图即可。代码如下:
$this->session->set_flashdata( 'test', 'testing' );
echo $this->session->flashdata( 'test' );
$data['test'] = 'testing';
$this->load->view('sample_view', $data);
底线是将
flashdata
与redirect()
一起使用,对于视图,应该传递变量。希望这有帮助 您需要使用PRG-Post/Redirect/Get模式。
如果页面内容中有表单,则重定向和加载视图是不同的
Scenario:
有一个视图,视图1,其中有一个表单,用于从帐户中借记资金。在视图_1中提交表单后,您希望跳转到带有成功消息的视图_2,并且您有两个选项来实现相同的目的。1.加载带有成功消息的视图2或2。重定向至查看带有flash数据并带有成功消息的_2
选项1:加载视图2并显示成功消息
当您提交表单并刷新时,它将导致重新提交,并导致从帐户中多次借记,但事实并非如此。您也可以看到弹出的警报“确认表单重新提交”
选项2:这是正确的答案
PRG
PRG-发布/重定向/获取
PRG是一种web开发设计模式,它可以防止重复的表单提交,也就是说,提交表单(视图1)->重定向->获取(视图2)
重定向状态代码-HTTP 1.0与HTTP 302或HTTP 1.1与HTTP 303
带有重定向状态代码的HTTP响应还将在location header字段中提供URL。使用此代码的响应会邀请用户代理(例如web浏览器)对位置字段中指定的新URL发出第二个相同的请求
重定向状态代码用于确保在这种情况下,web用户的浏览器可以安全地刷新服务器响应,而不会导致重新提交初始HTTP POST请求
当然
flashdata
在当前$this->load->view()上不起作用代码>,因为它设置的会话值仅在浏览器加载的下一页(而不是当前页面)上可见。如果要将数据传递到view()
,只需将其传递到视图($page,$data)
将其本身作为第二个参数调用即可。我不确定您要做什么。您可能需要花更多的时间阅读CI文档。。听起来你把事情弄混了一点……虽然我正在努力解决这个问题,但它们似乎是多余的,尽管$this->load->view()
似乎缺少flash消息使用等功能。当然,您可以不必总是使用重定向()
?
Post/Redirect/Get Solution