Доступность сеанса в модели и поведении

Я работаю в Cake 3.x и мне нужен идентификатор вошедшего в систему пользователя. В Cake 2.x вы могли получить это через сеанс или AuthComponent (как грязно)

AuthComponent::user();

Но теперь в Cake 3.x... Как я могу получить доступ к сеансу чистым способом, чтобы получить идентификатор пользователя?

Я нашел: http://book.cakephp.org/3.0/en/development/sessions.html Но он говорит, что легко получить сеанс из контроллеров, компонентов, представлений и т. д....

РЕДАКТИРОВАТЬ: очень грязным решением может быть получение переменной $_SESSION. CakePHP не рекомендует этот вариант... Итак, я предпочитаю другое решение :)

Благодарю вас!


person Bob    schedule 15.01.2015    source источник


Ответы (2)


Вам нужно будет вручную передать значение или поместить его в глобально доступный объект. Проверьте этот плагин, чтобы получить представление о том, как это можно сделать чистым способом, также вероятно, что этот плагин реализует то, что вы все равно пытались сделать :)

https://github.com/hmic/cakephp-blame

Редактировать: я только что проверил исходный код этого плагина, и кажется, что он изменил подход на тот, с которым я не согласен. Этот другой плагин (https://github.com/ceeram/blame) содержит исходную реализацию, которую я имел в уме.

Что он делает, так это прикрепляет событие к вашим моделям, чтобы текущий пользователь, вошедший в систему, передавался в события таблицы и мог быть прочитан любым поведением.

person José Lorenzo Rodríguez    schedule 15.01.2015
comment
Спасибо :). Второй URL-адрес может помочь... Вот как бы вы это сделали? - person Bob; 15.01.2015
comment
Да, я бы использовал события контроллера для передачи данных в события поведения. Таким образом, поведение будет безопасным для использования даже при использовании таблицы из оболочек или других мест. - person José Lorenzo Rodríguez; 15.01.2015

Вы можете получить доступ к сеансу, используя: Cake\Network\Session;

use Cake\Network\Session;

Например:

public function getSessionUser() {
    $session = new Session();
    return $session->read('Auth.User');
}
person fitorec    schedule 03.02.2018