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

问题描述 投票:5回答:1

我经常发现自己的路线需要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时更糟糕。

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

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

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

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

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

symfony symfony-routing symfony-3.4
1个回答
1
投票

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

经过一些小调查后,path twig function使用了UrlGenerator class,它似乎比创建自定义服务/枝条功能更难以覆盖它。

© www.soinside.com 2019 - 2024. All rights reserved.