重用Symfony路由复杂/多个参数

Dar*_*ein 5 symfony symfony-routing symfony-3.4

我经常发现自己的路线需要2个(有时4个以上)参数来生成路线.只要我只需要在几个位置生成路线,这就没问题了.但我经常发现自己在Twig和PHP(控制器和服务)中的许多位置都重现了参数列表.参数通常不仅仅是记录ID.

例如,假设我有以下路线:

/product/{id}/{category_slug}/{category_sub_slug}/{product_slug}
Run Code Online (Sandbox Code Playgroud)

要在Twig中生成这个,我需要这样的东西:

path('product_view', { 
    id: product.id, 
    category_slug: product.subCategory.category.slug,
    category_sub_slug: product.subCategory.slug, 
    product_slug: product.slug 
})
Run Code Online (Sandbox Code Playgroud)

这在一个地方已经足够糟糕了,但是一旦你开始在任何地方处理它就会很糟糕,甚至当有人决定他们不想再包含ID时更糟糕.

问题:有没有办法添加可重用的方法,比如product_path($product)可以在Twig和Controllers/Services中使用?或者扩展Router或UrlGenerator以确定实体/对象应如何用于路由生成?

我可以提供服务然后进行Twig扩展,但看起来很常见,需要完成很多工作/代码.

一个想法是我可以在哪里:

path('product_view', { product: product })
$this->generateUrl('product_view', ['product': product]);
Run Code Online (Sandbox Code Playgroud)

从那里它可以弄清楚如何生成URL.当然逻辑是我写的东西,但我只需要通过路由器.

Fab*_*les 1

我认为最简单的解决方案是创建自定义服务和树枝扩展,就像您使用自己的树枝功能所说的那样。

经过一些小的调查后,pathtwig 函数使用该类UrlGenerator并且正确覆盖它似乎比创建自定义服务/twig 函数更困难。