我正在使用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 message
和userdata
但无法获取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工作。
这是什么,我认为错误消息长度导致了这里的问题,我不知道为什么
答案 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->
?
它可能没有区别,但至少为了一致性而坚持一种方式(我建议使用“常规”)