Как использовать сеансы имен в Symfony2

Я пытаюсь использовать сеансы symfony2. Я делаю это

$session = $this->getRequest()->getSession(); $session->set('token','value'); 

Это работает. Но я хочу использовать пространство имен в сеансе. Документация говорит

  class NamespacedAttributeBag 

предоставляет эту функцию, но я не могу понять, как ее реализовать

Related of "Как использовать сеансы имен в Symfony2"

Просто откройте свой config.yml и после импорта добавьте:

 parameters: session.attribute_bag.class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag 

Это выглядит так:

 imports: - { resource: parameters.yml } - { resource: security.yml } parameters: session.attribute_bag.class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag framework: # ... 

Вы должны переопределить сеансовую службу, а также определить сервис для вашего пакета атрибутов (если вы проверите реализацию по умолчанию session.attribute_bag вы увидите, что эта служба имеет только атрибут класса).

И добавьте новый сервис для переопределения сеансового сервиса

 services: session: class: Symfony\Component\HttpFoundation\Session\Session arguments: - @session.storage - @your.session.attribute_bag #service id is defined below - @session.flash_bag your.session.attribute_bag: class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag 

Поскольку также возможно использовать компонент HTTPFoundation вне Symfony2, способ реализации NamespacedUserBags выглядит следующим образом:

 use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag; $session = new Session(); //first bag $myAttributeBag = new NamespacedAttributeBag('<your_storage_key_1>'); $myAttributeBag->setName('<your_tag_name_1>'); $session->registerBag($myAttributeBag); //second bag $myAttributeBag = new NamespacedAttributeBag('<your_storage_key_2>'); $myAttributeBag->setName('<your_tag_name_2>'); $session->registerBag($myAttributeBag); $session->start(); 

Зарегистрируйте столько пакетов, сколько хотите, но обязательно сделайте это, прежде чем начинать сеанс. Теперь вы можете переключаться между пакетами с помощью getBag ():

 $activeBag = $session->getBag('<your_tag_name>'); 

и получить доступ к пакету имен с типичными методами:

 $activeBag->set('tokens/a', 'adsf82983asd'); $activeBag->set('tokens/b', 'daslfl232l3k'); print_r($activeBag->get('tokens'));