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

时间:2018-01-03 22:53:00

标签: symfony symfony-routing symfony-3.4

我经常发现自己的路线需要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。当然逻辑是我写的东西,但我只需要通过路由器。

1 个答案:

答案 0 :(得分:1)

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

经过一些调查后,path twig function使用了UrlGenerator class,而且正确覆盖它比创建自定义服务/树枝功能更难。