set_flashdata有时无法在我的codeigniter应用程序中工作

时间:2011-11-29 11:09:50

标签: php codeigniter

我正在使用codeigniter,在我的控制器中我无法设置flashdata,但我可以设置用户数据

 /**
 * this will send the requests for the gmail wrapper
 * @return void
 * @author Sandaruwan
 * */

function send_contacts()
{
    $contacts = $this->input->post('contact');
    if (count($contacts) != 0 && is_array($contacts)) 
    {   
        $data = $this->gmailmanager->send_messeges($contacts);

         echo "error message ===>"; print_r($this->message->get_message ()); echo "<br/>";

        $this->session->set_flashdata('message',$this->message->get_message ());
        echo "flash data ===>"; print_r($this->session->flashdata('message')); echo "<br/>";


        $this->session->set_userdata('user',$this->message->get_message ());
        echo "user data ===>"; print_r($this->session->userdata('user')); echo "<br/>";

        exit;

        redirect('connections/connection_inviter/invite');
    }
    else
    {
        $this->message->set_information(array(_('You have not selected a conatact!')));
        $this->session->set_flashdata('message',$this->message->get_message ());
        redirect('connections/connection_inviter/invite');  
    }
}

这是结果

    error message ===>

    Warning

        Email sending error!


    flash data ===>
    user data ===>

    Warning

        Email sending error

!

问题是我可以获得error messageuserdata但无法获取flashdata,我无法弄清楚为什么我无法立即获得flashdata初始化。

在某些控制器中,flashdata完美运行。

更新

function invite() {
$this->load->library("connections/Outlookmanager");

print_r($this->ci->session->flashdata('message'); die;

    //Invite friends links        
$this->data['is_windows']=$this->outlookmanager->is_windows_user();
$this->load->view('connections/invite_friends', $this->data);

}

当我在flashdata中打印function invite()时,它不会打印。

更新

嗯,嗯。实际上有一个非常有趣的问题,

我收到错误消息Email sending error我将其更改为err现在闪存数据正常工作。我再次将消息更改为Email sending error,它再次无效。然后我再次将其更改为err然后再次flashdata工作。

这是什么,我认为错误消息长度导致了这里的问题,我不知道为什么

1 个答案:

答案 0 :(得分:4)

那是因为flashdatas(虽然CI使用单词“session”),实际上是cookie,因此它们仅在下次请求时可用。

老实说,我没有看到在创建后立即设置和调用flashdatas的原因,为什么不打印错误而跳过这个无用的步骤?

如果您仍想要两者,请执行

$this->session->set_flashdata('message',$this->message->get_message());
echo $this->message->get_message();

这样您现在就会收到一条消息,并在以后的任何请求中发送消息

<强>更新

尝试调用$this实例的方法而不是$this->ci

print_r($this->session->flashdata('message');

我想我已经看到你这样做,有时使用$this的引用,有时使用另一个对象,而IIRC我甚至回答了有关差异的问题。为什么?为什么您在某个位置使用$this,然后在另一个位置使用$this->ci->? 它可能没有区别,但至少为了一致性而坚持一种方式(我建议使用“常规”)