基于主机的Symfony路由


Symfony routing based on host

我想定义一个路由"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)

这可能吗?

因为您的第二条路由正在覆盖第一条路由。它们的名称不应该相同,只需将它们命名为:domain1_product_pagedomain2_product_page或类似的名称即可。