Symfony3:动态子域名
问题描述:
对于我正在开发的项目,我需要为使用该服务的每个客户使用动态子域名。默认情况下,/路线应该匹配indexAction,但遵循架构slug.domain.com的每个站点都应该使用slugIndexAction。Symfony3:动态子域名
另外,主机名也应该是动态的。 (在parameters.yml定义)
我目前的设置是这样的:
slug_index:
path: /
host: "{slug}.{domain}"
defaults:
_controller: app.controller.frontend:slugIndexAction
domain: '%domain%'
requirements:
domain: '%domain%'
index:
path:/
defaults:
_controller: app.controller.frontend:indexAction
在这种情况下,它始终是指数路由匹配,就算我用一个子域。我也尝试使用硬编码的slu and和主机名,但是这也不起作用。
当指数删除路由,我得到一个ResourceNotFoundException/NotFoundHttpException
未找到路线 “GET /”
http://test.localhost:8000/
此外,才有可能使用相同的控制器在两种情况下,因为它们基本上都是一样的,所以slu are用于修改css和标题。
答
的Symfony的文档显示的routing a sub-domain homepage to a specific action
的例子在YAML配置,这就是:
projects_homepage:
path: /
host: "{project_name}.example.com"
defaults: { _controller: AppBundle:Main:projectsHomepage }
# $project_name would be a variable to projectsHomepageAction()
homepage:
path: /
defaults: { _controller: AppBundle:Main:homepage }
您也可以使用相同的控制器的动作 - 我已经做了不同的路线类似(但不在子域上)使用默认变量,不会出现在URL中,但会根据所使用的路线进行设置:
* # for iframe-use - optionally, with partner-friendly footers
* @Route("/", name="homepage_menus", defaults={"hasMenus"=true, "partnerLinks"=false})
* @Route("/partners", name="homepage_partner_footer", defaults={"hasMenus"=false,"partnerLinks"=true})
*
* @Route("/body-only", name="homepage_body_only", defaults={"hasMenus"=false,"partnerLinks"=false})
*/
public function indexAction(Request $request, $hasMenus = false, $partnerLinks = false)
如何解析'$ request-> getHost( )'到'indexAction'并摆脱'slug_index'路线? – yceruto
@yceruto这将是一个选项,我认为使用路由会更好的最佳做法 – TechTreeDev