这里是问题的上下文:我想构建一个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'));
奇迹这是有效的,我被重定向到网站的索引!
我的问题是:这里的机制是什么?为什么它不在第一个工作,在第二个工作良好?我应该怎么做让它在第一种情况下工作?
非常感谢你的时间,
答案 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版本