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和标题。

+0

如何解析'$ request-> getHost( )'到'indexAction'并摆脱'slug_index'路线? – yceruto

+0

@yceruto这将是一个选项,我认为使用路由会更好的最佳做法 – TechTreeDev

的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)