正在显示CodeIgniter flashdata [flash:old:message]

时间:2016-04-29 18:15:33

标签: codeigniter flash

我在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]未设置,则不显示任何内容。

请帮忙。

干杯,

麦克

2 个答案:

答案 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);
        }
    }
}

索引视图:

&#13;
&#13;
<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;
&#13;
&#13;

检索视图:

&#13;
&#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;
&#13;
&#13;