2013-03-12 144 views
3

我想知道什么最好的办法有一个层次结构的URL,例如:Symfony2的URL层次结构

如果我有3类

-Cateogory1 
--Category2 
---Category3 

我想的URL解析到

/category1 
/category1/category2 
/category1/category2/category3 

我也使用jms_i18n_routes来支持路由中的语言环境。我已经启用SymfonyExtraBundle。我现在看到的唯一方法就是创建一个新的路由器,并将其添加到路由器列表中,但问题是jms_i18_router扩展了symfony默认路由器,所以如果我这样做,我将能够拥有所有默认的国际化URL路由但不是这个自定义路由器,这意味着我将不得不复制我已经进入新路由器的功能(非常毫无意义)

此外,如果我添加此路由器的类别层次结构,我可能必须有不同的实体类型不同的版本,除了我想要的功能类别(或者有一个巨大的if语句来检查每个场景) - 两种解决方案对我来说都不是很优雅,所以我想知道你对这个问题有什么想法? 谢谢!

+1

这可能是一个可能的孤立:http://php-and-symfony.matthiasnoback.nl/2012/01/symfony2-dynamically-add-routes/与它的问题是我们如何清除只有路由缓存所以只有当我们更新一个类别slu so,以便链接正确时才更新它。 – Feras 2013-03-14 05:49:51

回答

0

你可以通过设置狂胜重复模式做到这一点,使用正则表达式对狂胜的“要求”部分,类似这样:

# categories rout: 
categories: 
    pattern:  /{cat} 
    defaults:  { _controller: HelloBundle:Default:categories } 
    requirements: 
     cat:  (category[1-9]\/)+ 

通知:

你应认识到$猫变斜线在“categoriesAction”功能上。

当然,如果你想从非ASCII字符动态分层的URL,并使这个URL从持久实体我认为你可以通过创建一个ascii实体字段,如实体id或其他实体特殊字段的URL来做到这一点,键。