CakePHP 2.6: чтение сеанса в контроллере не работает

Я написал свой client.id в сеансе с синтаксисом ниже.

$this->Session->write('Client.id', $client_id);

Затем я проверил это в view.ctp, как показано ниже.

<pre><?php print_r($this->Session->read('Client.id')); ?> </pre>

Он печатает массив с id.

Теперь в Controller я попробовал код ниже, чтобы получить сеанс client.id.

$client_id = $this->Session->read('Client.id');

В это время я не получаю $client_id. Есть ли там какая-то ошибка. Может ли кто-нибудь помочь мне, пожалуйста?

Здесь я добавляю больше кода, как указано в комментарии

В пользовательском контроллере я установил пользователя $client_id в действии входа в систему.

if($user_role == 'client')
    {
           $user_email = $this->Auth->user('email');
           $this->loadModel('Client');
           $client_id  = $this->Client->find('all',
                                              array(
                                                         'conditions'=>array('Client.email'=>$user_email),
                                                         'fields' => array('Client.id'),
                                                         'limit'  => 1,
                                                         'recursive' => -1, //int
                                          )
         );

         $this->Session->write('Client.id', $client_id);
 }

Вот код, который я пытался применить в условиях

if($role == 'client'){
           $this->AppComment->recursive = 0;

           $client_id = $this->Session->read('Client.id');


           $this->Paginator->settings = array(
                    'conditions' => array('AppComment.client_id' => $client_id)
           );

           $this->set('appComments', $this->Paginator->paginate());
}

я нашел ошибку

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'where clause'

Вот вывод для

<pre><?php print_r($this->Session->read('Client.id')); ?> </pre>

Вывод, который я получаю

  Array
(
    [0] => Array
        (
            [Client] => Array
                (
                    [id] => 1
                )

        )

)

person Alimon Karim    schedule 03.11.2015    source источник
comment
все кажется правильным, я помог бы, если бы вы предоставили больше фрагмента вашего кода   -  person Pradeep Singh    schedule 03.11.2015
comment
хорошо, позвольте мне добавить больше кода. Я редактирую свой вопрос.   -  person Alimon Karim    schedule 03.11.2015
comment
Все выглядит нормально. Проверьте, приходят данные или нет в $client_id.   -  person Shaddy    schedule 03.11.2015
comment
Не имеет особого смысла делать find('all') в сочетании с ограничением 1. Вместо этого было бы намного проще сделать find('first').   -  person Oldskool    schedule 03.11.2015


Ответы (2)


Попробуйте это в действии входа

 if($user_role == 'client'){
     $user_email = $this->Auth->user('email');
     $this->loadModel('Client');
     $client_id  = $this->Client->find('first',
                       array(
                            'conditions'=>array('Client.email'=>$user_email),
                            'fields' => array('Client.id'),
                            'recursive' => -1, //int
               )
    );
    if(!empty($client_id)){
       $this->Session->write('Client.id', $client_id["Client"]["id"]);
    }
}

И проверьте в своих условиях, установлен ли сеанс или нет.

if($this->Session->check("Client.id")){
    $client_id = $this->Session->read("Client.id");
}else{
   //handle if session is not set
}
person Pradeep Singh    schedule 03.11.2015
comment
Я получаю тот же результат :( Если я использую ваш код, то в сеансе не устанавливается никакого значения, я проверил. - person Alimon Karim; 03.11.2015
comment
проверьте сейчас, отредактировал ответ. Если есть какая-либо запись с вашим условием (Client.email => $user_email), она будет работать - person Pradeep Singh; 03.11.2015
comment
Я получаю здесь исключение ошибки. Да, есть запись. - person Alimon Karim; 03.11.2015
comment
в чем ошибка и что выводится при применении этого кода - person Pradeep Singh; 03.11.2015
comment
Ваш ответ правильный, просто посмотрите мой массив, который вы пропустили 1-й параметр. Пожалуйста, добавьте его, я приму ваш ответ. - person Alimon Karim; 03.11.2015
comment
Здесь быстро находят? - person Alimon Karim; 03.11.2015

Я решаю эту проблему, просто добавляя ниже код

$this->Session->write('Client', $client_id[0]["Client"]['id']);
person Alimon Karim    schedule 03.11.2015
comment
я добавил это в свой ответ, но если написать найти (сначала) вместо найти (все), тогда не будет необходимости в [0] - person Pradeep Singh; 03.11.2015
comment
Хорошо, пожалуйста, добавьте свои ответы, которые вы предпочитаете. - person Alimon Karim; 03.11.2015
comment
Я рад, что ты получил ответ - person Pradeep Singh; 03.11.2015