我经常发现自己的路线需要2个(有时4个以上)参数来生成路线。只要我只需要在几个位置生成路线,这就没问题了。但我经常发现自己在Twig和PHP(控制器和服务)中的许多位置都重现了参数列表。参数通常不仅仅是记录ID。
例如,假设我有以下路线:
$basedir
要在Twig中生成这个,我需要像:
/product/{id}/{category_slug}/{category_sub_slug}/{product_slug}
这在一个地方已经足够糟糕,但是一旦你开始在任何地方处理它就会很糟糕,甚至当有人决定不再想要包含这个ID时更糟糕。
问题:有没有办法添加可重用的方法,比如说path('product_view', {
id: product.id,
category_slug: product.subCategory.category.slug,
category_sub_slug: product.subCategory.slug,
product_slug: product.slug
})
可以在Twig和Controllers / Services中使用?或者扩展Router或UrlGenerator以确定实体/对象应如何用于路由生成?
我可以提供服务然后进行Twig扩展,但看起来很常见,需要完成很多工作/代码。
一个想法是我可以在哪里:
product_path($product)
从那里可以找出如何生成URL。当然逻辑是我写的东西,但我只需要通过路由器。
答案 0 :(得分:1)
我认为最简单的解决方案是创建一个自定义服务和枝条扩展,就像你用自己的枝条功能所说的那样。
经过一些调查后,path
twig function使用了UrlGenerator
class,而且正确覆盖它比创建自定义服务/树枝功能更难。