【问题标题】:Symfony2 - encoding url parameters like slash, dot and plusSymfony2 - 编码 url 参数,如斜线、点和加号
【发布时间】:2012-09-25 13:11:03
【问题描述】:

我的 symfony2(2.0.16) 路由有问题。

我尝试运行 2 条路线,例如

route1:
  host/my/route/{param}
    requirements: 
      param: ".*[^/]$"
route2:
  host/my/route/category/{param}
    requirements: 
      param: ".*[^/]$"

你可以想象,第二条路线不会被调用,无论如何..

我真正想做的是搜索和专门搜索,因此我还需要允许点、加号和斜杠..

我尝试将斜杠编码(urlencode 为 %2F 或 %252F)以便我可以更改要求,但 symfony 总是在路由之前对其进行解码,所以如果我删除要求,我会收到路由错误。

我想过使用base64编码,但这不能解决我的问题..

编辑:我也不能依赖路线的顺序,因为我从许多不同的包中导入路线..

【问题讨论】:

  • 另外你可能需要交换路由,因为路由是从上到下测试的。因为第二个更具体,但它高于不太具体的一个(与注释“早期路线总是赢”相比)。请让自己熟悉 Symfony2 路由的一般工作方式:symfony.com/doc/2.0/book/routing.html
  • 感谢答案,但我在帖子中提到的方式我可以依赖于路线的顺序,我很清楚基本的路由工作流程,我读过食谱如果我使用允许参数斜杠的要求,它将“吃掉”路线,因为它在我的示例中(我的模式看起来不同,因为我不喜欢最后的斜杠)

标签: symfony routing special-characters urlencode


【解决方案1】:
#This one before the other to be considered !
route2:
  host/my/route/category/{param}
    requirements: 
      param: ".+"

route1:
  host/my/route/{param}
    requirements: 
      param: ".+"

【讨论】:

  • 我很抱歉,但我不能依赖路线的顺序,在我正在工作的项目中,我们只需要很多路线并从不同的捆绑包中导入它们,我们必须确保路线是独一无二的
  • 确保它们是唯一的,好的,但是当路由组件搜索与请求 URL 匹配的第一个模式时,您必须管理并依赖顺序。
【解决方案2】:

第一个路由的参数不能是category 否则它将匹配它而不是忽略它。您可以更改正则表达式以忽略此值:

route1:
  host/my/route/{param}
    requirements: 
      param: "(?!category/).*[^/]$"
route2:
  host/my/route/category/{param}
    requirements: 
      param: ".*[^/]$"

现在一个名为 category 的参数后跟一个斜杠将被忽略,并且模式将不匹配,除了第二个路由。

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 2017-05-17
    • 2017-02-05
    • 1970-01-01
    • 2017-07-26
    • 2010-10-10
    • 2011-04-04
    • 2011-12-29
    相关资源
    最近更新 更多