我们正在构建一个 Symfony2 应用程序,它将使用子域服务于不同的部分:
- api.tld.com - API 系统
- docs.tld.com - 文档
- assets.tld.com - 提供图像的系统
我们这样做的方式是为每个子域创建一个 app 目录,并将标准 /app 目录保留在适当的位置作为中央共享配置。每个应用程序的 web 目录中还有一个自定义引导程序。使用 .htaccess 相应地路由子域。
我遇到的问题是多个配置文件的来源,特别是当它们有自己的路由导入时。在某些情况下,最多可以有 4 个 configs.yml 文件。以以下 URL 为例:
配置设置当前的工作方式是这样的(并且可以正常工作)
- tld.com - 位于 /app/config/config.yml 的全局配置
- testing - 位于 /app/config/config_testing.yml 的环境配置。此配置还将 config_dev.yml 导入同一目录中。
- docs - 位于 /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');
现在配置加载就好了。但是我遇到的麻烦,并且没有找到任何明确的文档,是当这些配置中的一个以上定义框架时:路由器:资源。在上面的示例配置中,这些被加载(无论如何都尝试)如下:
/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 文件中导入路由文件的方法。我只能找到这个,它并没有准确解释应该在什么时候使用(或在哪里)。它在包含配置的 AppKernal 中不起作用,因此我假设路由器在该阶段未处于活动状态。
有人有想法么?我将不胜感激。