Доступность сеанса в модели и поведении
Я работаю в Cake 3.x и мне нужен идентификатор пользователя, вошедшего в систему. В Cake 2.x вы могли получить это через сессию или AuthComponent (насколько грязно)
AuthComponent::user();
Но теперь в Cake 3.x... Как я могу получить чистый доступ к Сессии, чтобы получить идентификатор пользователя?
Я нашел: http://book.cakephp.org/3.0/en/development/sessions.html Но там говорится, что сессию легко получить из контроллеров, компонентов, представлений и многого другого...
РЕДАКТИРОВАТЬ: очень очень грязное решение может быть, чтобы получить $_SESSION
переменная. CakePHP не рекомендует эту опцию... Итак, я предпочитаю другое решение:)
Спасибо!
2 ответа
Вам нужно будет вручную передать значение или поместить его в объект, который доступен глобально. Проверьте этот плагин, чтобы получить представление о том, как это можно сделать чистым способом, также вероятно, что то, что этот плагин реализует, является тем, что вы пытались сделать в любом случае:)
https://github.com/hmic/cakephp-blame
Изменить: я только что проверил исходный код в этом плагине, и похоже, что он изменил подход к тому, с которым я не согласен. Этот другой плагин ( https://github.com/ceeram/blame) содержит оригинальную реализацию, которую я имел в виду.
Что он делает, так это присоединяет событие к вашим моделям, чтобы текущий вошедший в систему пользователь передавался в события таблицы и мог быть прочитан любым поведением.
Вы можете получить доступ к сессии, используя: Cake\Network\Session;
use Cake\Network\Session;
Например:
public function getSessionUser() {
$session = new Session();
return $session->read('Auth.User');
}