Подтвердить что ты не робот

Как вы получаете доступ к сеансу пользователей из службы в Symfony2?

Кто-нибудь знает, как получить доступ к переменной сеанса в службе?

У меня есть служба, с которой я передаю контейнер. Я могу получить доступ к таким вещам, как служба Doctrine, используя:

// Get the doctrine service
$doctrine_service = $this->container->get('doctrine');  
// Get the entity manager
$em = $doctrine_service->getEntityManager();

Однако я не уверен, как получить доступ к сеансу.

В контроллере сеанс можно получить с помощью:

$session = $this->getRequest()->getSession();
$session->set('foo', 'bar');
$foo = $session->get('foo');

Является частью сеанса службы, и если да, то что называется службой.

Любая помощь будет действительно оценена.

4b9b3361

Ответ 1

php app/console container:debug показывает, что служба session является экземпляром класса Symfony\Component\HttpFoundation\Session, поэтому вы можете получить сеанс с этим именем:

$session = $this->container->get('session');

После выполнения вашей работы в сеансе вызовите $session->save();, чтобы записать все на сеанс. Кстати, есть еще две службы, связанные с сеансом, которые также отображаются в моем контейнере:

session.storage instanceof Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage

session_listener instanceof Symfony\Bundle\FrameworkBundle\EventListener\SessionListener

Ответ 2

Если вы не хотите передавать весь контейнер, вы просто передаете @session в аргументах:

services.yml

my.service:
    class: MyApp\Service
    arguments: ['@session']

Service.php

use Symfony\Component\HttpFoundation\Session\Session;

class Service
{

    private $session;

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

    public function someService()
    {
        $sessionVar = $this->session->get('session_var');
    }

}

Ответ 3

Попробуйте это решение:

use Symfony\Component\HttpFoundation\Session\Session;

$session = new Session();
$session->get('variable');

Ответ 4

faz assim que vai funcionar

use Symfony\Component\HttpFoundation\Session\Session;

class ClassType extends AbstractType {
    private $session;

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options) {

        $this->session = new Session();

    ->add('field', $this->session->get('nameFieldSession'));

    }

}