Symfony2 - 编码url参数,如斜杠,点和加号

时间:2012-09-25 13:11:03

标签: symfony routing special-characters urlencode

Ich有一个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编码,但那不能解决我的问题..

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

2 个答案:

答案 0 :(得分:1)

#This one before the other to be considered !
route2:
  host/my/route/category/{param}
    requirements: 
      param: ".+"

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

答案 1 :(得分:0)

第一条路线的参数不能为category,否则会匹配而不是忽略它。您可以更改正则表达式以忽略此值:

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

现在,将忽略名为category后跟斜杠的参数,并且除了第二条路线外,模式不会匹配。