jay*_*abs 5 codeigniter codeigniter-2
在我的控制器中,我将此代码用于检查购物车是否为空:
if (!$this->cart->contents()){
$this->session->set_flashdata('message', 'Your cart is empty!');
}
$this->data['message'] = $this->session->flashdata('message');
$this->load->view('templates/header', $this->data);
$this->load->view('bookings', $this->data);
$this->load->view('templates/footer');
Run Code Online (Sandbox Code Playgroud)
在我的"预订"视图中,我设置此代码以显示消息:
<div id="infoMessage"><?php echo $message;?></div>
Run Code Online (Sandbox Code Playgroud)
但是在第一页上加载消息"你的购物车是空的!" 没有显示.但是,当我按F5键或刷新浏览器时,它将显示.
我已经从codeigniter阅读了"CodeIgniter支持"flashdata"的手册,或者只能用于下一个服务器请求的会话数据,然后自动清除."
但是,我不知道在哪里设置此消息,因此它将在"下一个服务器请求"上可用.
jle*_*eft 18
无需将数据传递给视图并将其指定为flashdata.
它第一次不工作的原因是flashdata仅适用于下一个服务器请求.加载视图不是服务器请求.但是,刷新页面是.
有几个解决方案:
你可以直接传递它(我个人会选择这个选项 - 我不确定你为什么要在这种情况下使用flashdata,我会认为你总是想告诉用户他们是否购物车是空的......):
控制器:
if (!$this->cart->contents())
{
$this->data['message'] = 'Your cart is empty!';
}
$this->load->view('templates/header', $this->data);
$this->load->view('bookings', $this->data);
$this->load->view('templates/footer');
Run Code Online (Sandbox Code Playgroud)
视图:
<div id="infoMessage"><?php echo $message;?></div>
Run Code Online (Sandbox Code Playgroud)
或者,如果您想使用flashdata,那么:
控制器:
if (!$this->cart->contents())
{
$this->session->set_flashdata('message', 'Your cart is empty!');
}
redirect('/your_page');
Run Code Online (Sandbox Code Playgroud)
视图:
<div id="infoMessage"><?php echo $this->session->flashdata('message');?></div>
Run Code Online (Sandbox Code Playgroud)
如果您想使用此方法,您不能简单地只加载视图 - 由于我上面解释的服务器请求问题 - 您必须重定向用户,使用redirect('/your_page');和URL帮助程序 $this->load->helper('url');.您还可以使用本机PHP header函数发送相应的HTTP标头.第一次加载视图将不起作用.
您可以使用它$this->session->keep_flashdata('message');来保留数据以获取其他请求.
我还要检查你是自动加载会话库还是将它加载到控制器的构造函数中:( $this->load->library('session');我很确定你会这样,但是无论如何都值得检查.)
最后,我知道有些人在他们的数据库中存储会话数据可能会遇到flashdata问题,所以如果上述方法都没有帮助,可能值得研究.
在旁注中,我个人会检查以确保在回显之前设置变量.