重用具有复杂/许多参数的Symfony路由



我经常发现自己的路由需要 2+(有时是 4+)参数来生成路由。只要我只需要在几个点生成路线,这就可以了。但是我经常发现自己在许多地方复制参数列表,包括Twig和PHP(控制器和服务)。参数通常不仅仅是记录 ID。

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

/product/{id}/{category_slug}/{category_sub_slug}/{product_slug}

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

path('product_view', { 
id: product.id, 
category_slug: product.subCategory.category.slug,
category_sub_slug: product.subCategory.slug, 
product_slug: product.slug 
})

这在 1 个地方已经够糟糕的了,但是一旦你开始在任何地方应对它,当有人决定他们不想再包含 ID 时,情况就更糟了。

问:有没有办法添加一种可重用的方法,比如product_path($product)可以在 Twig 和控制器/服务中使用的方法?或者扩展路由器或 UrlGenerator 以确定如何使用实体/对象生成路由?

我可以做一个服务来做这件事,然后做一个Twig扩展,但似乎是一件很常见的事情,需要完成很多工作/代码。

一个想法是我可以这样的地方:

path('product_view', { product: product })
$this->generateUrl('product_view', ['product': product]);

从那里它可以弄清楚如何生成URL。当然,逻辑是我写的,但我只需要传递路由器。

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

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

最新更新