【问题标题】:Reusing Symfony routes with complicated/many params重用具有复杂/许多参数的 Symfony 路由
【发布时间】:2018-01-03 22:53:00
【问题描述】:

我经常发现自己的路线需要 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 和控制器/服务中使用?或者扩展 Router 或 UrlGenerator 以确定实体/对象应如何用于路由生成?

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

一个想法是我可以这样:

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

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

【问题讨论】:

    标签: symfony symfony-routing symfony-3.4


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 2017-10-23
      • 2020-06-15
      • 2017-03-03
      • 1970-01-01
      相关资源
      最近更新 更多