2017-10-06 88 views
1

對於我正在開發的項目,我需要爲使用該服務的每個客戶使用動態子域名。默認情況下,/路線應該匹配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

回答

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)