Symfony2 URL 分层结构

3
我想知道如何最好地采用分层结构的URL,例如:

如果我有3个分类

-Cateogory1
--Category2
---Category3

我希望URL解析为:
/category1
/category1/category2
/category1/category2/category3

我还使用 jms_i18n_routes 支持路由的多语言。 我已经启用了SymfonyExtraBundle。 目前唯一的方法就是创建一个新的路由并将其添加到路由列表中,但问题在于jms_i18_router 扩展了Symfony默认路由器,所以如果我那样做,我将能够为所有默认路由获得国际化网址,但对于此自定义路由却不行,这意味着我必须将我已经拥有的功能复制到新路由上 (这很无意义)。
此外,如果我为类别层次结构添加此路由,除了我想要这个功能的类别之外,我可能还需要针对不同的实体类型有不同版本的路由(或者有一个巨大的if语句来检查每种情况)- 两种解决方案都不太优雅,所以我想知道您对这个问题有何想法?谢谢!

1
可能有一个可行的解决方案:http://php-and-symfony.matthiasnoback.nl/2012/01/symfony2-dynamically-add-routes/,但问题在于我们如何仅清除路由缓存,以便在例如更新类别标志时更新,从而保证链接正确... - Feras
1个回答

0

你可以通过设置路由重复模式来实现这一点,在路由的“requirements”部分使用正则表达式,类似于这样:

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

注意:

在“categoriesAction”函数中,您应该识别$cat变量上的斜杠。

当然,如果您想从非ASCII字符创建动态分层URL,并从持久化实体创建此URL,则可以通过从ASCII实体字段(如entity-id或其他实体特殊键)创建URL来实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接