2012-01-04 2 views
16

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

ответ

16

Найдено рабочее решение для CakePHP 2 здесь: Reading a session variable inside a behavior in 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; 
    } 
} 
+1

Согласно моему третьему варианту, только потому, что вы можете сделать Ты не хочешь. –

9

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

$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; 
    } 
} 

?> 
10

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

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

Ничего себе! Звучит хорошо! – powtac

Смежные вопросы