在Symfony2中的多个子域主机名中生成适当的URL

时间:2015-11-24 11:38:35

标签: php symfony routing yaml

我正在Symfony 2中开发一个多子域Web应用程序。

子站点:

  • admin.example.com是主要托管网站。
  • member.example.com是另一个指向相同源代码的子域。

正如documentation中所述,我按如下方式配置了路由:

member.example.com的家长路由:

my_app_member:
    resource: "@member.yml"
    prefix:   /
    host:     "member.example.com"

注意:上述路由是member.example.com中定义的member.yml所有路由的父路由配置。

**现在我有admin.example.com的另一条路线:**

admin_user_mod:
    path:     /admin/new
    defaults: { _controller: "somecontroller" }

但是,如果我必须使用代码生成路由admin_user_mod的完整网址:

$modLink = $this->get("router")->generate('admin_user_mod');

生成的路径路径正确但基本网址仍为member.example.com,应为admin.example.com

有没有办法,或者我在上面的路线配置中遗漏任何东西以获得所需的结果。

是否有任何symfony事件监听器覆盖路由器的“generate()”方法调用?

您的所有输入都非常值得注意。

谢谢

2 个答案:

答案 0 :(得分:3)

路由器可以使用getContext()方法:

$context = $this->getContainer()->get('router')->getContext();
$context->setHost('admin.example.com');

答案 1 :(得分:0)

正如Routing Documentation中所述,传递true作为generate方法的第三个参数将生成一个绝对URL。

所以在你的情况下会是......

$modLink = $this->get('router')->generate('admin_user_mod', [], true);

执行此操作时,请确保在路由配置中指定主机。例如,您的路线应该是......

admin_user_mod:
    path: /admin/new
    host: admin.example.com
    defaults: { _controller: "somecontroller" }