Drupal документация по сессиям упоминает, что сеансы могут быть доступны через объект Request:
Доступ к данным сеанса осуществляется через
\Symfony\Component\HttpFoundation\Request::getSession()
метод, который
возвращает экземпляр
\Symfony\Component\HttpFoundation\Session\SessionInterface
. Большинство
важными методами SessionInterface являются set(), get() и remove().
Однако я также обнаружил, что существует служба сеанса.
В классе, где мне нужно использовать внедрение зависимостей, и у меня по умолчанию нет доступа к объекту запроса, мне все еще нужно получить доступ к сеансу через запрос или я могу использовать его напрямую? Вместо этого загрузка запроса и последующий доступ к сеансу кажутся дополнительными издержками.
Я пробовал ниже код, который, кажется, работает нормально. Так почему же большинство примеров и даже документация по-прежнему демонстрируют способ запроса? Я что-то упустил, или в этом подходе есть риск?
класс MyForm расширяет FormBase {
/**
* Сессия.
*
* @var\Symfony\Component\HttpFoundation\Session\Session
*/
защищенная $сессия;
/**
*
* @param\Symfony\Component\HttpFoundation\Session\Session $session
* Сессия.
*/
публичная функция __construct($session) {
$this->session = $session;
}
/**
* {@inheritdoc}
*/
общедоступная статическая функция create(ContainerInterface $container) {
вернуть новую статику(
$контейнер->получить('сеанс')
);
}
функция некоторая функция () {
$this->session->get('value');
$this->session->set('value', 'somevalue');
}
}