CakePHP Auth получить дополнительные данные - PullRequest
4 голосов
/ 24 января 2010

Я только учусь CakePHP, так что извините

Я использую компонент авторизации CakePHP 1.2.5 с UsersController. Модель пользователя содержит две таблицы:

class User extends AppModel {
    var $name = 'User';
    var $belongsTo = 'Company';
}

Когда вызывается login (), я вижу данные, извлекаемые в журнале SQL (выполняется LEFT JOIN), поэтому модель кажется корректной, но Auth только сохраняет данные из таблицы users и удаляет все остальное. Как я могу получить данные компании позже, не выполняя дополнительный запрос?

Ответы [ 3 ]

4 голосов
/ 25 января 2010

Или, если вам неудобно изменять основную библиотеку, как я, вы также можете сделать ...

на вашем UsersController.login действии

function login() {
    if ($this->Auth->user()) {
        $Session->write('Company', $this->User->Company->findById($this->Auth->user('id')));
        $this->redirect($this->Auth->redirect());
    }

}

Вы можете получить доступ к информации о компании, используя $this->Session->read('Company.name') на вашем контроллере и $session->read('Company.name') на ваших представлениях. Не забудьте добавить Session компонент и помощник.

2 голосов
/ 25 января 2010

в торт / libs / controller / components / auth.php в строке 819, должно быть

$data = $model->find(array_merge($find, $conditions), null, null, 0);

попробуйте изменить его на

$data = $model->find(array_merge($find, $conditions), null, null, 1);

в основном установлен рекурсивно в 1 возможно, придется сделать это и в других местах.

1 голос
/ 25 января 2010

Лучше, чем изменять ядро, попробуйте содержать поведение: http://book.cakephp.org/view/474/Containable Внизу страницы есть пользователь / профиль / пример.

...