CakePHP организующие контроллеры - PullRequest
0 голосов
/ 06 ноября 2010

У меня следующие запросы, общие для нескольких методов контроллеров. так есть ли способ организовать это? мне понадобятся все переменные в контроллере, поэтому я не могу создать приватный метод и вернуть его

    // 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 ]

2 голосов
/ 07 ноября 2010

Поскольку это относится к зарегистрированному пользователю, вы должны сделать это один раз и сохранить данные в сеансе. Если вы используете AuthComponent (что вам, вероятно, следует), то уже существует универсальный способ узнать, вошел ли пользователь в систему и какой у него идентификатор:

$this->Auth->user('id');

Все остальные данные пользовательской модели доступны таким же образом. Это просто сохраняется в сеансе под ключом 'Auth' и доступно как $this->Session->read('Auth.User.id'). Если вы хотите сохранить еще больше данных о пользователе в сеансе (например, связанные элементы или еще что-то), сделайте это один раз в методе login .

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 голос
/ 06 ноября 2010

Как насчет функции в AppController? Или еще лучше - AppModel?

...