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
相关产品推荐
相关产品推荐

