CakePHP: $ user [$ this-> Auth-> getModel () -> alias]? - PullRequest
0 голосов
/ 03 ноября 2011

Мне трудно понять, что здесь происходит

class AppController extends Controller {
...
public function beforeFilter() {
    $user = $this->Auth->user();
    if (!empty($user)) {            
        Configure::write('User', $user[$this->Auth->getModel()->alias]);
    }
}
...
}

В моем примере ...

  1. $ user = Array ([id] =>1 [username] => user [active] => 1 [email] => user@site.com)

  2. $ this-> Auth-> getModel () -> alias ='Пользователь' (строка)

  3. $ user [$ this-> Auth-> getModel () -> alias] = Array ([id] => 1 [username] => user[active] => 1 [email] => user@site.com)

Мои вопросы:

  1. Как работает $ user ['User '] и $ user - это одно и то же?Мне кажется, $ user - это ассоциативный массив с ключами id, username, active и email.Я не уверен, как работает ключ 'User'.

  2. Может кто-нибудь объяснить синтаксис "::" и что Configure :: write ('User', ...)делает и как получить доступ к этой переменной 'User' (вероятно, имеет некоторый условный термин для этого ..).Я обнаружил, что Configure :: read ('User') извлекает эту информацию.Это правильно?

  3. Наконец-то .. Я запутался между двумя терминами Пользователь (модель как в $ this-> Пользователь-> create () для создания нового пользователя) и Пользователь (из Configure :: write ('Пользователь', ...)).Разве это не одно и то же?

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Вы можете использовать разные модели вместе с AuthComponent.По умолчанию это User, но вы можете сделать это Member, Admin или как там еще называются ваши пользовательские модели.Вызов $this->Auth->user() возвращает массив с прикрепленным к нему основным именем, например:

array(
    'Admin' => array(
        'id' => ...
        ...
    )
)

(я подозреваю, что вы неправильно отлаживаете переменную $user).

Единственное единственноеблок кода выполняет запись пользовательских данных в конфигурацию (просто место для хранения значений) без этого промежуточного ключа Admin.Я предполагаю, что это так, что любой фрагмент кода в любом месте может получить информацию о текущем пользователе, не беспокоясь о том, является ли это $user['User'] или $user['Admin'] или чем-то еще.Вместо этого вы можете просто использовать Configure::read('User') или Configure::read('User.id') или Configure::read('User.name') и т. Д.

Выбор имени User в Configure::write('User', ...) является совершенно произвольным.Вы можете использовать все, что угодно, оно не имеет предопределенного значения.

Кстати, если это просто контроллер, вы можете получить информацию о текущем пользователе, не беспокоясь о том, как пользовательская модель вызывается с помощью $this->Auth->user('name') (длянапример, получить имя).

0 голосов
/ 03 ноября 2011

$ user ['User'] и $ user не могут быть одинаковыми. Какой код вы использовали для проверки содержимого $ user ['User'] и $ user? «::» - это способ доступа к функциям и переменным класса. «->» - это способ доступа к объектным функциям и переменным. Он не разрешает доступ к переменной «Пользователь» (это просто строка, а не переменная). Итак, Configure::write() вы вызываете метод класса write () в классе Configure.

$ this-> User-> create () и Configure :: write ('User', ...) - это совершенно разные вещи. $ this-> User - это объект класса User. «Пользователь» - это просто строка.

Наконец, этот фрагмент кода копирует зарегистрированную запись пользователя в сеансе (сохраненную компонентом Auth) в одноэлементный класс конфигурации времени выполнения Configure. Это $this->Auth->getModel()->alias просто для получения ключа массива $ user. Потому что Auth может быть настроен на использование другой модели для аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...