CakePHP组织控制器

时间:2010-11-06 16:41:03

标签: cakephp cakephp-1.3

我在控制器的几个方法上有以下常见查询。有没有办法组织它?我将需要控制器中的所有变量,所以我不能创建一个私有方法并返回它。

    // 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'))));

2 个答案:

答案 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?