5

我经常发现自己的路线需要 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 
})

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

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

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

一个想法是我可以这样做:

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

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

4

1 回答 1

1

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

经过一些小调查,path树枝功能使用UrlGenerator该类,并且似乎比创建自定义服务/树枝功能更难正确覆盖它。

于 2018-01-04T10:25:39.210 回答