3

我在控制器中创建了一个带有可选参数的路由,如下所示:

/**
 * 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

我错过了什么?

4

1 回答 1

4

在以下定义中,

* @Route("/association/{assoc}/{league}", name="league", requirements={"league" = "\d+"}, defaults={"game" = null})
* @Route("/association/{assoc}/{league}/{game}")

两条路线与您的操作有关,第一条路线(已命名"league"没有任何默认参数,第二条未命名路线(因为您没有添加名称属性)也没有任何默认参数。

怎么修 ...

  • 将 a 添加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".

于 2013-09-09T08:22:24.247 回答