在我的控制器中,我将此代码用于检查购物车是否为空:
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');
在我的“预订”视图中,我设置此代码以显示消息:
<div id="infoMessage"><?php echo $message;?></div>
但是在第一页上加载消息“你的购物车是空的!”没有显示。但是,当我按F5键或刷新浏览器时,它会显示。
我已经从codeigniter阅读了“CodeIgniter支持”flashdata“的手册,或者只能用于下一个服务器请求的会话数据,然后自动清除。”
但是,我不知道在哪里设置此消息,因此它将在“下一个服务器请求”中可用。
答案 0 :(得分: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');
查看:强>
<div id="infoMessage"><?php echo $message;?></div>
或者,如果你想使用flashdata,那么:
<强>控制器:强>
if (!$this->cart->contents())
{
$this->session->set_flashdata('message', 'Your cart is empty!');
}
redirect('/your_page');
查看:强>
<div id="infoMessage"><?php echo $this->session->flashdata('message');?></div>
如果你想使用这种方法,你不能简单地加载视图 - 由于我上面解释的服务器请求问题 - 你必须使用redirect('/your_page');
和{{重定向用户3}} $this->load->helper('url');
。您还可以使用本机PHP URL Helper函数发送相应的HTTP标头。第一次加载视图将不起作用。
您可以使用此$this->session->keep_flashdata('message');
保留数据以获取其他请求。
我还会检查您是自动加载会话库还是将其加载到控制器的构造函数中:$this->load->library('session');
(我很确定您会这样做,但无论如何都值得检查。)< / p>
最后,我知道有些人在他们的数据库中存储会话数据可能会遇到flashdata的问题,所以如果上述方法都没有帮助,可能值得研究。
在旁注中,我个人会检查一下,确保在回显之前设置变量。