【发布时间】:2015-02-18 06:08:06
【问题描述】:
这里是问题的上下文:我想构建一个 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。
完美运行。然后,我将管理员的路由直接包含到 routing.yml 文件中,并动态加载“站点”路由。
但是
在提交任何表单以创建/编辑/删除站点中的任何内容时,管理员控制器会返回以下返回错误 500(找不到路由“索引”)
return $this->redirect($this->generateUrl('index'));
(不用说,'index' 路由是在所有站点的所有 sub_routing.yml 文件中定义的)。
为了了解请求中的内容以确保我正确到达,我修改了以下内容:
var_dump($this->getRequest()->attributes->all());
return $this->redirect($this->generateUrl('index'));
奇迹般地,我被重定向到了网站的索引!
我的问题是:这里的机制是什么?为什么它首先不起作用,而在第二个却很好?我应该怎么做才能让它在第一种情况下工作?
非常感谢您的宝贵时间,
【问题讨论】:
-
您的第一个解决方案应该可以正常工作,可能是因为您错过了 routingSecondSite 中的前缀
-
嗨,谢谢,但这是复制粘贴的错误,因为我的 routing.yml 文件中存在前缀参数...(我已经更新了问题)