我在控制器中创建了一个带有可选参数的路径,如下所示:
/**
* League action
*
* @Route("/association/{assoc}/{league}", name="league", requirements={"league" = "\d+"}, defaults={"game" = null})
* @Route("/association/{assoc}/{league}/{game}")
* @Template()
*
* @param $assoc
* @param $league
* @param $game
* @return array
*/
public function leagueAction($assoc, $league, $game)
但如果我尝试使用此命名路由创建链接,则省略可选参数:
{{ path('league', {'assoc': association.short, 'league': league.id, 'game': g.id}) }}
结果链接
/关联/ BVNR / 7
我缺少什么?
答案 0 :(得分:2)
在以下定义中,
* @Route("/association/{assoc}/{league}", name="league", requirements={"league" = "\d+"}, defaults={"game" = null})
* @Route("/association/{assoc}/{league}/{game}")
两个路由与您的操作相关,第一个路径(名为"league"
没有任何默认参数,第二个未命名路径(因为您没有添加名称属性)也没有任何默认参数。
如何解决...
name
并将其称为包含"game"
参数的路径。"game"
参数的默认值移至第二条路线(因为它是唯一拥有game
参数的路线。"How to improve ..."
部分。)试试这个......
* @Route("/association/{assoc}/{league}/{game}", name="league_game", requirements={"league" = "\d+"}, defaults={"game" = null})
虽然您应该拨打"league_game"
而不是"league"
,
{{ path('league_game', {'assoc': association.short, 'league': league.id, 'game': g.id}) }}
如何改进......
确保您确实需要定义两条路线,因为我建议只保留一条路线。
由于以下定义中存在"game"
的默认值,
@Route("/association/{assoc}/{league}/{game}", name="league", requirements={"league" = "\d+"}, defaults={"game" = null}
然后涵盖两个版本,包含和不包含"game"
。