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