你能强迫symfony解决特定路线吗?

时间:2009-03-13 21:48:19

标签: php routing symfony1

假设我必须按此顺序关注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)的数据我不想创建相同的操作(结果)两次只是为了传递不同的参数

3 个答案:

答案 0 :(得分: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} }

这应该解决它,虽然我同意你的意思,当你在帮助器中使用路由名称时,它应该使用命名路由。

答案 1 :(得分:1)

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

当您点击生成的网址(例如/ home / CA)而没有添加要求时,它将匹配routes.yml文件中匹配的第一条规则,即您的“Zip”路由。

只是为了解释发生了什么。

答案 2 :(得分:0)

确实使用指定路线。问题是你的URL是相同的(参数名称是无关紧要的)所以当你在浏览器中加载URL时,匹配的第一个路径将始终是Zip,因为Symfony无法知道你想要哪一个。 / p>

添加requirements:是可行的方法。