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