我在OpenShift上使用CodeIgniter。
在我的控制器中,我使用:
$this->session->set_flashdata('message', 'message X');
$this->load->view('viewpage');
在我看来,我正在使用:
print_r ($this->session->userdata);
echo $this->session->flashdata('message');
以下是我的观察: 第一次通过控制器/加载视图,我看到没有回应
$this->session->flashdata('message');
我用print_r看到了这个:
[flash:new:message] =>讯息1
第二次通过控制器/加载视图,我看到"消息1"被回应 我用print_r看到了这个:
[flash:old:message] =>消息1 [flash:new:message] =>消息2
所以似乎正在发生的是[flash:old:message]而不是[flash:new:message]。如果[flash:old:message]未设置,则不显示任何内容。
请帮忙。
干杯,
麦克
答案 0 :(得分:0)
在flash数据中设置值时,您需要刷新视图:
Controller.php这样
function do_somthing(){
$this->session->set_flashdata('index', 'text message');
redirect('controller/view', 'refresh');
}
控制器/ view.php
<div>
<?= (isset($this->session->flashdata('index'))) ? $this->session->flashdata('index') : ''?>
</div>
答案 1 :(得分:0)
Flashdata旨在用于从1页移动到另一页(重定向),通常在帖子后使用它,返回成功/失败消息。
原因:
[flash:old:message] =&gt;消息1 [flash:new:message] =&gt;消息2
发生是因为flashdata被保留了1个额外的页面加载(所以如果需要你可以使用$ this-&gt; session-&gt; keep_flashdata()...因为你通过刷新页面来触发flashdata来生成这些结果混淆的东西,而不是这样设计使用..
由于您使用flashdata的方式比显示不正确的数据,这似乎是一个问题。
使用flashdata的一个工作示例如下(即使没有重定向)
控制器:
public function index()
{
if (!$this->input->post()) {
$this->load->view('playland/index');
}else{
if ($this->input->post('submit') == "submit") {
$data['firstname'] = $this->input->post('firstname');
$data['lastname'] = $this->input->post('lastname');
$this->session->set_flashdata('test', 'data posted');
$this->load->view('playland/retrieve', $data);
}
}
}
索引视图:
<html>
<body>
<?php print_r($this->session->userdata)?>
<form method="post" action="playland">
First name:<br>
<input type="text" name="firstname"><br>
Last name:<br>
<input type="text" name="lastname"><br>
<input type="submit" value="submit" name="submit">
</form>
</body>
</html>
&#13;
检索视图:
<html>
<body>
<?php echo $this->session->flashdata('test') ?><br>
<p>
First Name:<br>
<?php echo isset($firstname) ? $firstname : '';?><br>
Last Name:<br>
<?php echo isset($lastname) ? $lastname : '';?><br>
</p>
<A HREF="javascript:history.go(0)">Click to refresh the page</A>
<A HREF="javascript:history.back()">Return to original page</A>
</body>
</html>
&#13;