Symfony SessionInterface как служба такая же, как и запрос getSession () - PullRequest
0 голосов
/ 27 марта 2020
SessionInterface

Symfony все еще немного расплывчатый / волшебный c для меня. Поэтому, если кто-то может просветить меня, пожалуйста.

Естественно, запрос содержит объект сеанса и может использоваться в контроллере.

class SimpleController extends AbstractController
{
    public function index(Request $request): Response
    {
        $request->getSession()->set('session-var', 10);
    }
}

Однако в службу можно также включить SessionInterface как сервис и работает, предположительно, с тем же ParameterBag.

class SimpleService
{
    public function __construct(SessionInterface $session)
    {
        $session->set('session-var', 10);
    }
}

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


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

Пример кода моего варианта использования будет выглядеть примерно так:

class SimpleController extends AbstractController
{
    private $simpleService;

    public function __construct(SimpleService $simpleService)
    {
        $this->simpleService = $simpleService;
    }

    public function index(Request $request): Response
    {
        $this->simpleService->doSomething();
    }
}

class SimpleService
{
    private $session;

    public function __construct(SessionInterface $session)
    {
        $this->session = $session;
    }

    public function doSomething()
    {
        // Do some things..... and save the result in the session.
        $this->session->set('just_a_preference', 50);
    }
}

Итак:

  1. Является ли это / правильный способ работы с сеансами в Symfony?
  2. Сохраняется ли 'just_a_preference' в той же сумке параметров сеанса, что и мой $ request -> getSession ()?
  3. Если нет, как правильно работать с текущим сеансом запросов вне контроллера?

Если работать с Symfony 4.4.

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