set_flashdata иногда не работает в моем приложении codeigniter - PullRequest
0 голосов
/ 29 ноября 2011

Я использую 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.

что это, я думаю, что длина сообщения об ошибке вызывает проблему здесь, и я не знаю, почему

1 Ответ

4 голосов
/ 29 ноября 2011

Это потому, что 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 I даже ответил на вопрос о разнице.Почему так?Почему вы используете $this в одном месте, а затем $this->ci-> в другом?Это может не иметь значения, но, по крайней мере, для согласованности придерживайтесь одного способа (и я предлагаю использовать «обычный»)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...