【问题标题】:Can you force symfony resolve to a specific route?你能强制 symfony 解析到特定的路由吗?
【发布时间】:2010-10-13 06:49:42
【问题描述】:

假设我必须按此顺序遵循 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)显示数据我不想为了传入不同的参数而创建两次相同的操作(结果) .

【问题讨论】:

    标签: php routing symfony1


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      添加requirements: 是可行的方法。

      【讨论】:

      • 我猜那里还有一点解析?我认为,如果您指定了特定的路由名称,它将忽略所有其他路由并仅使用命名路由 - 因此具有相同的 url 不会有问题。
      【解决方案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} }
      

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

      【讨论】:

      • 啊,好吧...所以它实际上并没有解析到路由名称,它仍然进行一些解析——那么唯一的路由名称有什么意义呢?
      • 我需要查看更多关于您如何利用路线名称的代码。我认为这是在视图助手中(如 link_to 或 url_for),但我不确定。还有,什么版本的 symfony?
      • 我使用的是 Symfony 1.2.1,路由是从 url_for() 语句调用的。
      猜你喜欢
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2015-03-15
      • 1970-01-01
      • 2019-12-06
      相关资源
      最近更新 更多