Новое в Symfony 5.3: Прекращение поддержки сессионных сервисов

В приложениях Symfony вы можете получить доступ к сеансу через службу сеанса или его псевдоним автоподключения SessionInterface. Это удобно, но технически неправильно по ряду причин:

  • Сеанс — это объект данных (например, объект запроса), поэтому для него не должно быть определенной службы в контейнере;
  • Сеансы не являются частью спецификации HTTP (HTTP / 1.1, HTTP / 2 или HTTP / 3), потому что HTTP не имеет состояния. Вот почему кажется странным обрабатывать сеансы как часть компонента HttpFoundation.

Вот почему спустя много лет после того, как это было впервые предложено, прекращается поддержка сеансового сервиса в Symfony 5.3 и удаляем его в Symfony 6.0. Вместо того, чтобы внедрять эту сеансовую службу, теперь вам нужно внедрить службу RequestStack и использовать новый метод getSession():

use Symfony\Component\HttpFoundation\RequestStack;

class SomeService
{
    private $requestStack;

    public function __construct(RequestStack $requestStack)
    {
        $this->requestStack = $requestStack;
    }

    public function someMethod()
    {
        $session = $this->requestStack->getSession();
        // ... do something with the session
    }

    // ...
}