【问题标题】:Symfony routing based on host基于主机的 Symfony 路由
【发布时间】:2023-03-22 09:32:02
【问题描述】:

我想定义一个路由“product_page”,它将根据主机映射到不同的模式。每个路由的模式会有所不同,但我希望路由名称相同,以便在通过路由生成 URL 时可以在控制台命令中使用相同的名称(基于传递的主机名)。我无法弄清楚如何做到这一点,因为似乎同名的路线会覆盖以前的路线。例如:

product_page:
    pattern:  /product_page_type_1/{id}
    host: domain1.com
    defaults: { _controller: AcmeDemoBundle:Default:index}
    requirements:
        id: '[\d]+'

product_page:
    pattern:  /product_page_type_2/{id}
    host: domain2.com
    defaults: { _controller: AcmeDemoBundle:Default:index}
    requirements:
        id: '[\d]+'

然后,在我的控制台命令中,我想根据 product_page 路由和主机生成一个 URL。例如:

//should equal http://domain1.com/product_page_type_1/999
$this->getContainer()->get('router')->generate('product_page', array('id' => 99, 'host' => 'domain1.com'), UrlGenerator::ABSOLUTE_URL)

//should equal http://domain2.com/product_page_type_2/999
$this->getContainer()->get('router')->generate('product_page', array('id' => 99, 'host' => 'domain2.com'), UrlGenerator::ABSOLUTE_URL)

这可能吗?

【问题讨论】:

    标签: php symfony routing


    【解决方案1】:

    因为您的第二条路线覆盖了第一条路线。它们不应该命名相同,只需命名它们:domain1_product_pagedomain2_product_page 或类似名称。

    【讨论】:

    • 但是如果我在控制台命令中,我希望能够使用相同的路由名称但只更改主机。我是否必须更改所有路线才能将域名作为其中的一部分?喜欢 product_page_domain1.com 和 product_page_domain2.com?
    • 是的,你必须这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多