You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony会话数组特定键值获取:Twig模板实现问题

解决Symfony Twig中获取Session里团队名称的问题

嘿,我懂你的困扰!你已经摸到门道了——问题出在你从session里拿到的team_1并不是直接的团队名称字符串,而是一个以团队名称为键的嵌套数组。

先拆解下你存在session里的数据结构:

$this->session->set('teams', [
    'team_1' => ['MyTeamNameA' => ['player-1' => ..., 'points' => 0]],
    'team_2' => ['MyTeamNameB' => ['player-1' => ..., 'points' => 0]]
]);

当你在Twig里调用app.session.get('teams')['team_1'],得到的是['MyTeamNameA' => [...]]这个数组,而不是MyTeamNameA本身,所以直接这么写拿不到名称。

给你两个解决方案:

方案1:用Twig过滤器直接提取键

因为team_1对应的数组只有一个键(就是你的团队名称),可以用keys过滤器提取所有键,再用first取第一个元素:

{{ app.session.get('teams')['team_1']|keys|first }}

这样就能拿到MyTeamNameA了,完全适配你现在的session结构。

方案2:优化Session存储结构(更推荐)

如果你能修改后端存session的代码,建议把结构调整得更直观,避免嵌套键的歧义:

$this->session->set('teams', [
    'team_1' => [
        'name' => 'MyTeamNameA',
        'players' => [
            'player-1' => $safe['team-1-player-1'],
            'player-2' => $safe['team-1-player-2'],
            'player-3' => $safe['team-1-player-3'],
            'player-4' => $safe['team-1-player-4']
        ],
        'points' => 0
    ],
    'team_2' => [
        'name' => 'MyTeamNameB',
        'players' => [
            'player-1' => $safe['team-2-player-1'],
            'player-2' => $safe['team-2-player-2'],
            'player-3' => $safe['team-2-player-3'],
            'player-4' => $safe['team-2-player-4']
        ],
        'points' => 0
    ]
]);

调整后,在Twig里就能直接通过清晰的属性路径获取名称:

{{ app.session.get('teams')['team_1'].name }}

这种结构后续维护和扩展都会更方便,比如要加团队描述之类的字段,直接加属性就行。

你说dump能看到结果,那dump出来的内容应该显示team_1是一个包含单个键值对的数组,用上面的方案1就能快速拿到那个键啦~

内容的提问来源于stack exchange,提问作者Shogu23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:07:52