为所有从包路由导入的前缀添加前缀时,如何在 Symfony 包的模板中生成 URL?

Posted

技术标签:

【中文标题】为所有从包路由导入的前缀添加前缀时,如何在 Symfony 包的模板中生成 URL?【英文标题】:How to generate URLs in Symfony bundle's templates when prefixing all imported from bundle routes? 【发布时间】:2019-05-21 01:32:40 【问题描述】:

我有一个 Symfony 包,它定义了一个控制器并呈现了一些模板。 路由被定义为 bundle 的 routes.yaml 内的注解。

  * @Route("/edit/id", name="edit")
  * @Route("/new", name="new", defaults="id" : null)

然后,当我将捆绑包安装到应用程序中时,我会从捆绑包的 routing.yaml 导入所有带有前缀的路由。像这样:

admin_blog_controller:
    resource: '@BlogBundle/Resources/config/admin_routes.yaml'
    prefix: /admin/blog2
    name_prefix: admin.blog2.

现在我在捆绑包中有模板 我需要生成前缀未知的网址。 (因为前缀是在包之外定义的)。 我需要生成这样的路由: path('new') path('edit, "id": blogId) 但是找不到路线。

有没有办法在相对于 bundle 的 bundle 模板中生成 URL? 类似 path('@Bundle/new') path('@Bundle/edit, "id": blogId) 那么path可以自动检测和使用外部应用的前缀吗?

【问题讨论】:

【参考方案1】:

命名您的路线唯一名称,然后您可以在任何地方使用它。类似:

path('acmeBundle_controllerName_actionName', 'id': Variable.id)

你可以使用 php bin/console debug:router --env=dev (symfony +3) 或 php app/console debug:router --env=prod (symfony 2) 在您想要的环境中查看您的路线名称。

【讨论】:

【参考方案2】:

使用php bin/console debug:router。您应该在那里看到所有路线。

【讨论】:

以上是关于为所有从包路由导入的前缀添加前缀时,如何在 Symfony 包的模板中生成 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何为所有节点/快速路由添加前缀

在 Laravel 中添加前缀路由名称而不添加前缀 URI

在 React Router v4 中为路由添加前缀

在 YML 中为路由添加前缀 - 只有一个控制器

Slim (V3) 框架:为生成的链接添加前缀,但不为传入路由添加前缀

如何为路由组添加前缀以及如何在刀片视图中调用子路由