pow*_*tac 17
在这里找到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;
}
}
Run Code Online (Sandbox Code Playgroud)
Wil*_*ill 10
在CakePHP 2.x中,您可以静态使用AuthComponent并在模型中获取登录用户的ID,如下所示:
$userId = AuthComponent::user('id');
Run Code Online (Sandbox Code Playgroud)
如果从控制器调用保存,则可以在保存之前将会话数据包含在分配给模型的数据中:
$data['ModelName']['session_id'] = $this->Session->id;
$this->ModelName->save($data);
Run Code Online (Sandbox Code Playgroud)
或者您可以在模型中创建变量并将ID存储在那里以供日后使用:
<?php
//in model
class MyModel extends AppModel{
public $session_id;
}
//in controller
$this->MyModel->session_id = $this->Session->id;
?>
Run Code Online (Sandbox Code Playgroud)
如果必须在模型中使用该组件,则可以加载它.我不确定这是否会奏效.这不是一个好习惯,您应该考虑采用不同的方式.
<?php
App::uses('CakeSession', 'Model/Datasource');
class MyModel extends AppModel{
public function beforeSave(){
$this->data['session_id'] = $this->Session->id;
return true;
}
}
?>
Run Code Online (Sandbox Code Playgroud)