在Controller

时间:2018-06-05 16:27:56

标签: php symfony session symfony-3.4

这是我第一次使用NamespacedAttributeBag所以,我尝试以下代码,但它给了我一个例外" SessionBagInterface TestData未注册。&# 34;当我从另一个位置呼叫它时,也在同一个控制器内。

控制器

public function indexAction(Request $request, SessionInterface $session)
{

        $session = $request->getSession();

        $bag = new NamespacedAttributeBag();
        $bag->setName('TestData');
        $bag->set("Type", "Dummy");

        $session->registerBag($bag);
}


public function getDataAction(Request $request, SessionInterface $session)
{

        $session = $request->getSession();
        $bag = $session->getBag('TestData');

}

我要归档的是定义一个带有几个属性(数组)的包,并在另一个功能或控制器上使用这个包。

该例子说明了这个包没有定义,当我在getDataAction中转储会话(dump($session))时,我可以看到它是真的。我只能查看两个默认行李attributesflashes,但缺少TestData

我搜索了一个更完整的例子,但我找不到任何有用的东西。如果不能按我的意愿使用或者我遗漏了一些重要的东西,我就不会非常清楚。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在Symfony 4.2上,

为了在项目上使用NamespacedAttributeBag,可以在 config / services.yaml 中覆盖“ session.attribute_bag ”服务:

services:
    _defaults:
        autowire: true      
        autoconfigure: true  
 ...
    'session.attribute_bag':
         class: 'Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag'

,现在无需任何其他配置即可将名称空间用于来自控制器的用户会话数据:

class DossierController extends AbstractController {
    public function index(Request $request) {
       $request->getSession()->set('namespace1/categoryA/value1', $value);
    }
}