我在控制器的几个方法上有以下常见查询。有没有办法组织它?我将需要控制器中的所有变量,所以我不能创建一个私有方法并返回它。
// Checks if the User is logged in if yes gathers the ID
$id = $this->_loggedIN();
// Find the ItemID from the Item Table
$itemId = $this->User->Item->itemId('1', $id);
// Finding the User Data and last Status Message
$user = $this->User->Item->find('first', array('conditions' => array('Item.id' => $itemId), 'contain' => array('User', 'StatusMessage' => array('limit' => 1, 'order' => 'StatusMessage.created DESC'))));
答案 0 :(得分:2)
由于这似乎与登录用户有关,因此您应该一次并将数据保存在会话中。如果您正在使用AuthComponent(您可能应该这样做),那么已经有一种通用的方法来确定用户是否已登录以及他的ID是什么:
$this->Auth->user('id');
用户模型的所有其他数据都可以以相同的方式访问。这只是存储在密钥'Auth'
下的会话中,可以像$this->Session->read('Auth.User.id')
一样访问。如果您想在会话中存储更多关于用户的数据(如相关项目或诸如此类的内容),do it once in the login
method。
function beforeFilter() {
$this->Auth->autoRedirect = false;
}
function login() {
if ($this->Auth->user()) {
$item = /* find item */;
$user = /* find user */;
$this->Session->write('Auth.Item', $item);
$this->Session->write('Auth.User', $user);
$this->redirect($this->Auth->redirect());
}
}
答案 1 :(得分:1)
AppController中的函数怎么样?甚至更好 - AppModel?