我想从用户模型中收集用户的最新信息并将其存储在会话中。
所以我这样做
//渲染之前 函数beforeRender(){
if($this->Session->check('Auth.User')) {
$this->User->recursive = -1;
$currentUser = $this->User->read(null, $this->Session->read('Auth.User.id'));
$this->set(compact('currentUser'));
}
}
它在用户模型中工作正常。
当我转到页面时,它会给我一个错误,因为User-> read不起作用,因为该模型没有附加在那里。
什么是最好的解决方案?
哪种方法最好?
答案 0 :(得分:4)
/app/app_controller.php
。 beforeRender
功能。$uses
。请参阅book。
答案 1 :(得分:2)
其他建议似乎为您的应用程序增加了一些开销(通过加载和查询每个请求的User模型)。您是否考虑过在用户模型发生更新时更新过时的会话数据?
<?php
class UsersController extends AppController {
public function edit() {
$userId = $this->Session->read('Auth.User.id');
// populate form
if (!$this->data) {
$this->data = $this->User->read($userId, null);
return;
}
// update user
$saved = $this->User->save($this->data);
if ($saved) {
$user = $this->User->read(null, $this->User->id);
$this->Session->write('Auth.User', $user['User']); // update session
$this->Session->setFlash('Account details have been updated');
return $this->redirect(array('action' => 'profile'));
}
$this->Session->setFlash('Please correct the validation errors below');
}
}
?>
这意味着您将需要收集所需的数据,而无需任何其他查询(如果使用php
或cake
会话存储,则来自磁盘;如果使用{{1},则使用单个会话查询} storage)。
答案 2 :(得分:1)
您可以尝试在beforeRender中加载模型,如下所示:$this->load('User')
,这应该在每个控制器中为您加载模型。
http://book.cakephp.org/view/992/loadModel