我的网址结构有以下要求。
/{category}.html
/{category}-color-{color}.html
/color-{color}.html
所有这些网址都指向一个控制器,该控制器根据给定的过滤器信息为我的目录项生成过滤视图。除了上面提到的类别和滤色器之外,还有一些更加前缀(例如 length-12 )和非前缀片段。后者具有明显的正则表达模式。
所以我的问题是:在Symfony2中有没有办法用单一路由解决这个问题?
如果当前已完成该怎么办:
/{category}{color}{length}.html
生成单个路由,并将前缀添加到需求中。
/color-red.html
在匹配中提供[color => 'color-red']
,因此必须手动终止前缀'color - '。另一方面,网址的生成要求我将前缀添加到值($router->generate('foo', ['color' => 'color-red']);
),以便在生成网址时需要额外的步骤。数据库信息。$router->match()
或$router->generate()
来处理网址。模式是:/^((?P<category>([a-z]+))(\.html|-))?(length-(?P<length>([1-9][0-9]?))(\.html|-))?(color-(?P<color>([a-z]+))\.html)?$/i
同样,有没有办法通过一条路线解决这个问题而不会破坏$router->match()
和$router->generate()
?任何帮助表示赞赏。
答案 0 :(得分:1)
将symfony的默认路由器服务替换为包含辅助函数或扩展@router
方法的扩展服务器(也称为扩展Symfony\Component\Routing\Router
的新服务,名称为generate()
)。
然后使用能够匹配路线的解决方案2,而无需手动创建所有这些路线。
也许考虑将一条路线分成至少3条路线。在第一条匹配的路线获胜时,订单很重要。
/{category}-color-{color}.html
/color-{color}.html
/{category}.html