2

假设我必须按此顺序遵循 2 条路线:

Zip:
  url: home/:zip
  param: { module: home, action: results }

State:
  url: home/:state
  param: { module: home, action: results }

我使用如下路线:

'@State?state=CA'

为什么它会解析为 Zip 路由?我认为当您明确指定路由名称时:'@State' 它没有解析整个路由文件,而只是使用了您要求的特定路由。

我希望能够使用相同的操作来显示基于变量名称(zip 或 state)的数据我不想为了传入不同的参数而创建两次相同的操作(结果)。

4

3 回答 3

3

您需要添加要求,以便它能够识别不同的格式

Zip:
  url: home/:zip
  param: { module: home, action: results }
  requirements: { zip: \d{5} } # assuming only 5 digit zips

State:
  url: home/:state
  param: { module: home, action: results }
  requirements: { state: [a-zA-Z]{2} }

这应该可以解决它,尽管我同意你的观点,当你在帮助程序中使用路由名称时,它应该使用命名路由。

于 2009-03-13T22:01:06.170 回答
1

这里的问题是两个路由规则都解析为相同的 url (/home/),并且在生成链接时,它使用正确的命名路由来生成 url。

当您单击生成的 url(例如 /home/CA)而不添加任何要求时,它将匹配 routing.yml 文件中匹配的第一个规则,即您的“Zip”路由。

只是为了解释正在发生的事情。

于 2009-03-17T10:56:56.990 回答
0

确实使用了命名路由。问题是您的 URL 是相同的(参数名称无关紧要),因此当您在浏览器中加载 URL 时,第一个匹配的路由将始终是 Zip,因为 Symfony 无法知道您想要哪个。

添加requirements:是要走的路。

于 2009-03-15T02:27:39.353 回答