【发布时间】:2013-11-19 14:28:17
【问题描述】:
我的 url 结构有以下要求。
/{category}.html
/{category}-color-{color}.html
/color-{color}.html
所有这些 url 都指向一个控制器,该控制器根据给定的过滤信息生成我的目录项的过滤视图。除了提到的类别和颜色过滤器之外,还有一些前缀(例如 length-12)和非前缀片段。后者有不同的正则表达式模式。
所以我的问题是:有没有办法在 Symfony2 中通过一条路由来解决这个要求?
如果当前已经完成:
- 为每个可能的组合生成路由。
- 这行得通,但它给了我 15 条路线。添加更多过滤器片段将导致更多路由。
- 使用路径
/{category}{color}{length}.html生成单个路由,并将前缀放在要求中。- 感觉有点脏。 url
/color-red.html在匹配中给出[color => 'color-red'],因此前缀 'color-' 必须手动消除。另一方面,url 的生成需要我将前缀放在值 ($router->generate('foo', ['color' => 'color-red']);) 上,因此在基于例如生成 url 时需要额外的步骤。数据库信息。
- 感觉有点脏。 url
- 构建一个匹配所有组合的独立正则表达式。
- 这也可以,但它没有使用路由组件,因此无法使用
$router->match()或$router->generate()来处理url。模式是:
- 这也可以,但它没有使用路由组件,因此无法使用
/^((?P<category>([a-z]+))(\.html|-))?(length-(?P<length>([1-9][0-9]?))(\.html|-))?(color-(?P<color>([a-z]+))\.html)?$/i
再一次,有没有办法在不破坏$router->match() 和$router->generate() 的情况下用一条路线解决这个问题?任何帮助表示赞赏。
【问题讨论】: