路由未在控制器重定向Symfony2中完成 - 动态路由

时间:2014-12-19 10:13:15

标签: symfony routing routes

这里是问题的上下文:我想构建一个Symfony2的多站点安装。一方面是每个站点常见的管理员和内容类型,但每个站点的模板不同

因此,我需要访问每个访问过的网站。假设我们有2个站点sub1.site.com& sub2.site.com,对于相同的模式'/'我希望能够以不同的方式路由每个子网站的请求。

第一个测试解决方案:使用路由系统的“主机”,如此处所示(Host routing in Symfony)。 像它没有工作那样实现

routingFirstSite:
    resource: "@BundleName/Resources/config/routing1.yml"
    host: "sub1.site.com"
    prefix: /

routingSecondSite:
    resource: "@BundleName/Resources/config/routing2.yml"
    host: "sub2.site.com"
    prefix: /                             ==>*(added after 1st comment)

==>这个解决方案不起作用,它加载了所使用的主机的第二个无... ...

第二个解决方案:在听取kernel.request事件时使用动态路由,如下面的解决方案:Symfony custom/dynamic router

完美无缺。然后我直接将admin的路由包含到routing.yml文件中,并动态加载“站点”路由。

BUT

在提交任何表格以创建/编辑/删除网站中的任何内容后,管理员控制器会返回以下错误500(无法找到路径'索引')

return $this->redirect($this->generateUrl('index'));

(不用说'index'路由是在所有站点的所有sub_routing.yml文件中定义的。)

了解请求中的内容以确保我正确到达,我修改为以下内容:

var_dump($this->getRequest()->attributes->all());
return $this->redirect($this->generateUrl('index'));

奇迹这是有效的,我被重定向到网站的索引!

我的问题是:这里的机制是什么?为什么它不在第一个工作,在第二个工作良好?我应该怎么做让它在第一种情况下工作?

非常感谢你的时间,

1 个答案:

答案 0 :(得分:0)

在我的项目中,我总是添加一个匹配主机的要求:

我在parameters.yml中使用变量和参数,例如%your_host%

routingFirstSite:
    resource: "@BundleName/Resources/config/routing1.yml"
    prefix:   /
    host: "{your_host}"
    requirements:
        your_host: %your_host%


routingFirstSite:
    resource: "@BundleName/Resources/config/routing2.yml"
    prefix:   /
    host: "{your_second_host}"
    requirements:
        your_second_host: %your_second_host%

并在parameters.yml中你喜欢:

your_host: sub1.site.com
your_second_host: sub2.site.com

没有引号 你应该试一试,工作,如果不是请告诉你运行哪个symfony2版本