Php Symfony3:动态子域

Php Symfony3:动态子域,php,symfony,routing,subdomain,Php,Symfony,Routing,Subdomain,对于我正在进行的项目,我需要为使用该服务的每个客户使用动态子域。默认情况下,/route应该与indexAction匹配,但是模式slug.domain.com下的每个站点都应该使用slugIndexAction 此外,主机名也应该是动态的。(在parameters.yml中定义) 我当前的设置如下所示: slug_index: path: / host: "{slug}.{domain}" defaults: _controller: a

对于我正在进行的项目,我需要为使用该服务的每个客户使用动态子域。默认情况下,/route应该与indexAction匹配,但是模式slug.domain.com下的每个站点都应该使用slugIndexAction

此外,主机名也应该是动态的。(在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
在这种情况下,它总是匹配索引路由,即使我使用子域。我还尝试使用硬编码的slug和主机名,但也没有成功

当删除索引路由时,我得到一个ResourceNotFoundException/NotFoundHttpException

找不到“GET/”的路由


另外,在这两种情况下是否可以使用相同的控制器,因为它们基本上都在做相同的事情,slug用于修改css和标题。

Symfony文档显示了一个

在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()
解析为
索引
,并摆脱
slug\u索引
路由呢?@yceruto这将是一个选项,我认为使用路由将更好地考虑最佳实践
 * # 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)