Доступ к сеансу в модели - программирование
Подтвердить что ты не робот

Доступ к сеансу в модели

Есть ли способ доступа к текущему сеансу в классе AppModel?
Я хочу сохранить идентификатор текущего пользователя в состоянии почти каждого действия INSERT/UPDATE.

4b9b3361

Ответ 1

Найденное рабочее решение для CakePHP 2 здесь: Чтение переменной сеанса внутри поведения в cakephp 2

Это мой AppModel:

<?php
class AppModel extends Model {

    public function beforeSave() {
        parent::beforeSave();

        if (isset($this->_schema['user_id'])) {

            // INSERT
            if (!strlen($this->id)) {

                App::uses('CakeSession', 'Model/Datasource');
                $user_id = CakeSession::read('Auth.User.id');

                $this->data[$this->alias]['user_id'] = $user_id;

            // UPDATE, don't change the user_id of the original creator.
            } else {
                unset($this->data[$this->alias]['user_id']);
            }
        }
        return true;
    } 
}

Ответ 2

В CakePHP 2.x вы можете использовать AuthComponent статически и получить зарегистрированный идентификатор пользователя в модели следующим образом:

$userId = AuthComponent::user('id');

Ответ 3

Если вы вызываете сбережения с контроллера, вы можете просто включить данные сеанса в данные, которые вы назначили своей модели перед сохранением:

$data['ModelName']['session_id'] = $this->Session->id;
$this->ModelName->save($data);

Или вы можете создать переменную в своей модели и сохранить идентификатор там для использования позже:

<?php
//in model
class MyModel extends AppModel{
   public $session_id;
}


//in controller
$this->MyModel->session_id = $this->Session->id;
?>

Если вы должны использовать компонент в своей модели, вы можете загрузить его. Я не уверен, что это сработает. Это не хорошая практика, и вам, вероятно, стоит подумать об этом по-другому.

<?php

App::uses('CakeSession', 'Model/Datasource');

class MyModel extends AppModel{
   public function beforeSave(){
       $this->data['session_id'] = $this->Session->id;

       return true;
   }
}

?>