Reputation: 54949
I wanna gather the latest information of a user from the User Model and store it in the session.
so i am doing this
// Before Render function 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'));
}
}
It works fine until am in the User model.
When i go to the pages it gives me an error because User->read doesnt work as that model is not attached there.
Whats the best solution for ?
Which is the best way to do it ?
Upvotes: 3
Views: 9473
Reputation: 11212
The other suggestions seem to be adding a bit of overhead to your application (by loading and querying the User model for each request). Have you considered simply updating the stale session data when updates occur to your User model?
<?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');
}
}
?>
This means the data you need will be gathered each request without any additional queries (either from disk if using php
or cake
session storage, or in a single session query if using database
storage).
Upvotes: 2
Reputation: 5943
You can try to load the model in your beforeRender like this: $this->load('User')
, this should load the model for you in every controller.
http://book.cakephp.org/view/992/loadModel
Upvotes: 1