2015-08-28 34 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”,因此它为每个域返回不同的路径)