Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2 url层次结构_Url_Symfony_Routes_Hierarchy_Router - Fatal编程技术网

Symfony2 url层次结构

Symfony2 url层次结构,url,symfony,routes,hierarchy,router,Url,Symfony,Routes,Hierarchy,Router,我想知道有层次结构URL的最佳方法是什么,例如: 如果我有3个类别 -Cateogory1 --Category2 ---Category3 我想把URL解析为 /category1 /category1/category2 /category1/category2/category3 我还使用jms\u i18n\u路由来支持路由中的区域设置。我已经启用了SymfonyExtraBundle。目前我看到的唯一方法就是创建一个新路由器并将其添加到路由器列表中,但问题是jms\u i18\u路

我想知道有层次结构URL的最佳方法是什么,例如:

如果我有3个类别

-Cateogory1
--Category2
---Category3
我想把URL解析为

/category1
/category1/category2
/category1/category2/category3
我还使用
jms\u i18n\u路由
来支持路由中的区域设置。我已经启用了
SymfonyExtraBundle
。目前我看到的唯一方法就是创建一个新路由器并将其添加到路由器列表中,但问题是
jms\u i18\u路由器
扩展了symfony默认路由器,因此如果我这样做,我将能够为所有默认路由提供国际化URL,但不能为该自定义路由器提供国际化URL,这意味着我必须将我已经拥有的功能复制到新路由器中(非常没有意义)

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

您可以通过设置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来实现这一点。

这可能是一种孤立现象:问题是如何仅清除路由缓存,以使其仅当我们更新类别slug时更新,例如,以便链接正确。。。