【问题标题】:Using Symfony NamespacedAttributeBags in a Controller在控制器中使用 Symfony NamespacedAttributeBags
【发布时间】:2022-01-29 20:59:00
【问题描述】:

这是我第一次使用NamespacedAttributeBag,所以我尝试了以下代码,但是当我从另一个位置(也在同一个控制器。

控制器:

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

我要归档的是定义一个包含几个属性(数组)的包,并将这个包用于另一个函数或控制器。

expeption 说没有定义包,当我将会话 (dump($session)) 转储到 getDataAction 中时,我可以看到这是真的。我只能看到两个默认包 attributesflashes 但缺少 TestData

我搜索了一个更完整的示例,但没有发现任何非常有用的东西。我不太清楚这是否不能按我的意愿使用,或者我错过了一些重要的东西。

【问题讨论】:

  • 会话已开始时无法注册包
  • 我在注册包之前执行$session->start() 时收到该错误,但是当我在注册包之后将其移除或放置时,它工作正常。此外,我可以访问包和实际函数中的数据。但是当我尝试从同一个控制器上的另一个函数中获取那个包时,我得到了“未注册”错误。

标签: php symfony session symfony-3.4


【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2021-11-02
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多