2012-01-04 12 views
16

¿Hay alguna forma de acceder a la sesión actual en la clase AppModel?
Quiero guardar el ID del usuario que ha iniciado sesión actualmente en casi todas las acciones INSERT/UPDATE.Acceso a la sesión en el modelo

Respuesta

16

encontrado una solución de trabajo para CakePHP 2 aquí: Reading a session variable inside a behavior in cakephp 2

Esta es mi 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

Según mi tercera opción, simplemente porque usted puede hacer no significa que deberías. –

9

Si llama salva de un controlador, usted podría incluir los datos de la sesión en los datos que se asigna a su modelo antes de la guarda:

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

O bien, podría crear una variable en el modelo y almacenar el ID de allí para su uso posterior:

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


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

Si debe utilizar el componente en el modelo, entonces usted puede ser capaz de cargarlo. No estoy seguro si esto funcionará bien. Esta no es una buena práctica y probablemente debas considerar hacerlo de otra manera.

<?php 

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

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

     return true; 
    } 
} 

?> 
10

En CakePHP 2.x puede utilizar AuthComponent estáticamente y obtener la revisión en línea Identificación del usuario en el modelo como este:

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

¡Guau! ¡Suena bien! – powtac

Cuestiones relacionadas