【问题标题】:Symfony 3 - routing depending on the host nameSymfony 3 - 根据主机名进行路由
【发布时间】:2019-05-01 09:04:16
【问题描述】:

我正在尝试有条件地使用具有多域的路由。

我目前拥有的是:

admin_routes:
    host:     "admin.{domain}"
    resource: "@AppBundle/Controller/Admin"
    type: annotation
    requirements:
        domain: domain.local|domain2.local
    defaults: { domain: domain.local }

user_routes:
    host:     "user.{domain}"
    resource: "@AppBundle/Controller/User"
    type: annotation
    requirements:
        domain: domain3.local|domain4.local
    defaults: { domain: domain3.local }

两个文件夹中的控制器具有相同的路由名称,因为这是构建应用程序的方式。 由于应用程序仍在加载两条路线,因此上述方法不起作用。对于来自管理员的用户域 url 被构建。 我正在努力实现的目标是完全可能的,还是我完全以这种错误的方式做事?

最终我想要的是一组控制器仅对给定的主机名“可见”。

【问题讨论】:

    标签: php symfony symfony-3.4


    【解决方案1】:

    路线需要有唯一的名称。如果有 2 条具有相同名称的路由,则一条将覆盖另一条。至于主机规范,这只影响路由是否匹配。类似于路线要求。

    您的问题的解决方案是在两个控制器中以不同的方式命名路由。实现这一点的一件事是通过控制器类注释中的路由名称前缀。

    /**
     * @Route("/path", name="admin_")
     */
    

    /**
     * @Route("/path", name="user_")
     */
    

    https://symfony.com/blog/new-in-symfony-3-4-prefix-all-controller-route-names

    路由可以具有相同的/path 前缀,但它们的名称需要不同。这样他们可以匹配不同条件的相同路径。

    【讨论】:

    • 是的,这正是我所做的。我希望路由名称在主机名组合中必须是唯一的,但不是。该名称在整个应用中必须是唯一的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    相关资源
    最近更新 更多