2015-08-28 30 views
1

假設我有幾個共享大約80%功能的站點,其中包括路由策略,模板等。 我想爲它們使用相同的代碼庫,並且有一個「DefaultSiteBundle」和幾個「SiteABundle」,「SiteBBundle」使用包繼承覆蓋或向DefaultSiteBundle添加功能。Symfony:覆蓋/添加來自繼承的包的路由

這意味着,應始終加載DefaultSiteBundle,並根據域名,有條件地加載SiteABundle或SiteBBundle。

我的問題是,我如何管理路由,而無需將所有SiteBundles添加到app/config/routing.yml?

+0

如果只有路由可以使用['hostname_pattern'](http:// symfony.com/doc/current/components/routing/hostname_pattern.html)選項,但如果你想有完全不同的應用程序,那麼你可以使用[multiple kernels](http://jolicode.com/blog/multiple -applications-with-symfony2) – user2268997

+0

由於你的問題是關於如何處理路由,我假設你已經知道如何根據主機名有條件地加載bundle。你是怎樣做的?我在問,因爲你主要問題的答案可能取決於此。 –

+0

我使用基於「domain.name」環境變量的AppKernel中的registerBundles方法有條件地加載bundle。但是,仍然假設所有路由都是從app/config/routes.yml中配置的內容加載的,我不得不明確地在那裏添加所有的「網站」捆綁包,即使我不打算全部加載它們。未註冊捆綁包的路由會發生什麼?嗯..我沒有測試過 – Trashie

回答

1

我最終解決的方法是使用自定義路由器,基於symfony文檔中解釋的Advanced loader。路由器從這兩個bundle中加載和合並路由。 爲每個站點創建單獨的緩存也很重要(在AppKernel中重寫「getCacheDir」,因此它爲每個域返回不同的路徑)