我有以下两个Doctrine(ORM)实体:
类别包含一个或多个细分(级别):
category
category/sub-category
产品包含名称和可能的颜色。产品是否有颜色。
product
product/red
我希望同时拥有类别页面和产品页面。
类别网址应该由{locale}/{category_path}
组成,例如
/en_US/category
/en_US/category/sub-category
产品网址应该由{locale}/{category_path}/{product_path}
组成,例如
/en_US/category/product
/en_US/category/product/red
/en_US/category/sub-category/product
/en_US/category/sub-category/product/red
使用Symfony路由的问题在于以下路由之间可能存在匹配混淆,因为它们具有相同数量的段:
/en_US/category/sub-category
/en_US/category/product
这是我可以使用CMF DynamicRouter吗?如果是这样,在高层次上,我需要构建哪些部分?我是否需要为每个实体使用RouteProvider?
答案 0 :(得分:0)
要使用开箱即用的动态路由器,您的实体需要能够实现RouteReferrersReadInterface。也就是说,他们需要返回路由对象。您需要实现RouteProviderInterface,以便在数据库中找到文档。
使用Doctrine ORM,您可能需要单独的路由实体(每种语言一个),其中包含已显示的路径和指向产品/类别的链接。虽然ORM只能在已知实体之间进行链接 - 使用相同路由对象的一种方法是使类别和产品共享一个共同的基类Mapped Super Class。产品颜色变体可以作为URL的可变部分完成,因此您最终会得到一个模式,说明... / {color}
使用CMF route enhancer,您可以为类别和产品页面配置不同的控制器。
RoutingBundle提供了有限的ORM路由示例。您可以扩展基础实体,或者从那开始做自己的实体。 symfony.com上的文档通常首先提到如何使用CMF的默认存储,即Doctrine PHPCR-ODM,但事情也应该与ORM一起使用。如果某些内容不起作用,请在cmf github项目中打开问题。