Как получить доступ к сеансу пользователей из службы в Symfony2? - PullRequest
32 голосов
/ 25 августа 2011

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

У меня есть настройка службы, которой я передаю контейнер.Я могу получить доступ к таким вещам, как служба 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');

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

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

55 голосов
/ 27 октября 2012

Если вы не хотите передавать весь контейнер, просто введите @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');
    }

}
26 голосов
/ 25 августа 2011

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 голосов
/ 27 августа 2014

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

use Symfony\Component\HttpFoundation\Session\Session;

$session = new Session();
$session->get('variable');
0 голосов
/ 19 августа 2016

Фаз Ассим Кве Вай Функционар

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'));

    }

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