2010-01-23 3 views
4

Я только учусь CakePHP, так что простите меняCakePHP Auth получить дополнительные данные

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

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

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

ответ

4

Или, если вас не устраивает ядро ​​модифицирования библиотеки, как я, вы также можете сделать ...

на ваших 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.

+3

Возможно, было бы более удобно, если бы вы написали ключ сеанса 'Auth.User.Company'. Это позволит вам использовать методы обертки AuthComponent для доступа к значениям сеанса: '$ this-> Auth-> user ('Company.field');' – deizel

+0

Приятный подход для случаев, когда база данных сложна! Например, если у вас есть что-то вроде «User HABTM Company (with => CompaniesUser)». В случае сценария OP просто «содержать» (конечно, с установленным поведением) в '$ this-> Auth-> authenticate ('Form' => array ('содержать' => array ('Company',. ..))) '. [Документы проверки подлинности] (https://book.cakephp.org/2.0/ru/core-libraries/components/authentication.html). ** EDIT: ** Я действительно понимаю, что ответ был за торт 1.2. Мое предложение для торта 2.x (вот почему его комментарий, а не ответ!) – Fr0zenFyr

2

в торт/LIBS/контроллер/компоненты/auth.php на линии 819, он должен быть

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

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

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

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

Смежные вопросы