如何在Symfony2中使用Namespaced Sessions

adi*_*tya 13 php symfony

我正在尝试使用symfony2 sessions.I这样做

    $session = $this->getRequest()->getSession();
    $session->set('token','value');
Run Code Online (Sandbox Code Playgroud)

这有效.但我想在会话中使用命名空间.文档说

    class NamespacedAttributeBag 
Run Code Online (Sandbox Code Playgroud)

提供该功能,但我无法弄清楚如何实现它

Rom*_*kiy 15

只需打开config.yml,然后在导入后添加:

parameters:
    session.attribute_bag.class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }

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

framework:
# ...
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考:这在Symfony 3中不起作用,因为它们撕掉了所有这些类参数. (2认同)

Vit*_*ian 9

您应该重新定义会话服务并为您的属性包定义服务(如果您检查默认实现,session.attribute_bag您将看到此服务只有class属性).

并将新服务注入重新定义的会话服务

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
Run Code Online (Sandbox Code Playgroud)

  • 哇 - 文档真的不应该提到NamespacedAttributeBag,而不会详细介绍如何使用它.在敲打$ session-> registerBag()之后,我很高兴找到这个解决方案! (3认同)