我们正在构建一个 Symfony2 应用程序,它将使用子域为不同部分提供服务:
- api.tld.com - API 系统
- docs.tld.com - 文档
- asset.tld.com - 图像服务系统
我们的做法是为每个子域创建一个应用程序目录,并将标准 /app 目录保留为中央共享配置。每个应用程序的 Web 目录中还有一个自定义引导程序。使用 .htaccess 相应地路由子域。
我遇到的问题是多个配置文件进来的地方,特别是当它们有自己的路由导入时。在某些情况下,最多可以有 4 个 configs.yml 文件。以下面的网址为例:
http://testing.docs.tld.com http://testing.docs.tld.com
配置设置当前的工作原理如下(并且它有效)
- tld.com - 全局配置位于 /app/config/config.yml
- 测试 - 环境配置位于 /app/config/config_testing.yml。此配置还在同一目录中导入 config_dev.yml。
- 文档 - 应用程序配置位于 /app_docs/config/config.yml
这些都在 /app_docs/AppKernal.php 中的 AppKernal 中导入:
// Load Global Configuration
// ROUTES INSIDE THIS CONFIG ARE NOT BEING LOADED
$loader->load(__DIR__.'/../app/config/config.yml');
// Load Environment Configuration
// ROUTES INSIDE THIS CONFIG ARE NOT BEING LOADED
$loader->load(__DIR__.'/../app/config/config_' . $this->getEnvironment() . '.yml');
// Load App-centric Configuration
$loader->load(__DIR__.'/config/config.yml');
现在配置加载得很好。但是我遇到的问题是,当这些配置中的多个配置定义了framework:router:resources时,并且没有找到任何明确的文档。在上面的示例配置中,这些配置被加载(无论如何尝试)如下:
/app/config/config.yml
framework:
secret:%secret%
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: %kernel.debug%
/app/config/config_testing.yml
// No special Routing
/app/config/config_dev.yml
framework:
router: { resource: "%kernel.root_dir%/config/routing_dev.yml" }
/app_docs/config/config.yml
framework:
secret: %secret%
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: %kernel.debug%
所有配置都加载良好。但我发现只包含上面调用的最后一个路由文件。所以我认为规则是它们作为规则被覆盖,而不是扩展。
所以我过去几天一直在试图找出的是,是否有可能以上述方式扩展配置文件中路由文件的包含范围?我研究的另一个选择是找到一种在 AppKernal 文件中导入路由文件的方法。我只能找到this http://symfony.com/doc/2.0/components/routing.html#load-routes-from-a-file,它没有准确解释应该在什么时候(或在哪里)使用它。它在包含配置的 AppKernal 中不起作用,因此我假设路由器在该阶段未处于活动状态。
有人有主意吗?我将非常感激。