Я пытаюсь использовать сеансы symfony2. Я делаю это
$session = $this->getRequest()->getSession(); $session->set('token','value');
Это работает. Но я хочу использовать пространство имен в сеансе. Документация говорит
class NamespacedAttributeBag
предоставляет эту функцию, но я не могу понять, как ее реализовать
Просто откройте свой 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'));