Symfony3:动态子域

时间:2017-10-06 11:40:33

标签: php symfony routing subdomain

对于我正在开发的项目,我需要为每个使用该服务的客户使用动态子域。默认情况下,/ 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

在这种情况下,即使我使用子域,它也总是匹配索引路由。我也尝试使用硬编码的slu and和主机名,但这也不起作用。

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

  

找不到“GET /”

的路线
http://test.localhost:8000/

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

1 个答案:

答案 0 :(得分:2)

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 }

您也可以使用相同的控制器操作 - 我已经使用默认变量对不同路线(但不在子域中)执行类似操作,这些默认变量不会出现在网址中,但会基于在使用的路线上:

 * # 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)