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