Symfony2 url层次结构

Posted

技术标签:

【中文标题】Symfony2 url层次结构【英文标题】:Symfony2 url hierarchical structure 【发布时间】:2013-02-27 13:29:26 【问题描述】:

我想知道拥有分层结构化网址的最佳方法是什么,例如:

如果我有 3 个类别

-Cateogory1
--Category2
---Category3

我希望将网址解析为

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

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

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

【问题讨论】:

这可能是一种可能的解决方案:php-and-symfony.matthiasnoback.nl/2012/01/… 它的问题是我们如何仅清除路由缓存,以便仅在我们更新类别 slug 时才更新它,以便链接正确... 【参考方案1】:

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

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

注意:

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

当然,如果您想从非 ascii 字符创建动态分层 URL 并从持久实体创建此 URL,我认为您可以通过从 ascii 实体字段(如实体 ID 或其他实体特殊键)创建 URL 来做到这一点.

【讨论】:

以上是关于Symfony2 url层次结构的主要内容,如果未能解决你的问题,请参考以下文章

带有 FOSUserBundle 的 Symfony2 - 如何向我的应用程序添加没有层次结构的角色

如何在 Symfony2 中创建和注册新角色

Symfony2 翻译 URL 和路由

Symfony2 将哈希片段参数附加到分页 URL

Symfony2 - 在 TWIG 模板中获取当前 URL 或路由?

php/symfony2 从 URL 中隐藏 app.php