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
                )

        )

)

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
}

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

$this->Session->write('Client', $client_id[0]["Client"]['id']);
Другие вопросы по тегам