【问题标题】:Symfony3: dynamic subdomainsSymfony3:动态子域
【发布时间】:2017-10-06 11:40:33
【问题描述】:

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

http://test.localhost:8000/

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

【问题讨论】:

  • 如何将$request->getHost() 解析成indexAction 并去掉slug_index 路由?
  • @yceruto 这将是一个选项,我认为就最佳实践而言,使用路由会更好

标签: php symfony routing subdomain


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 2017-04-18
    • 2011-02-28
    • 2011-04-27
    • 2014-05-22
    • 1970-01-01
    • 2018-03-18
    • 2018-11-29
    相关资源
    最近更新 更多