Symfony2 用于子域路由的多个配置和路由文件

2024-01-06

我们正在构建一个 Symfony2 应用程序,它将使用子域为不同部分提供服务:

  1. api.tld.com - API 系统
  2. docs.tld.com - 文档
  3. asset.tld.com - 图像服务系统

我们的做法是为每个子域创建一个应用程序目录,并将标准 /app 目录保留为中央共享配置。每个应用程序的 Web 目录中还有一个自定义引导程序。使用 .htaccess 相应地路由子域。

我遇到的问题是多个配置文件进来的地方,特别是当它们有自己的路由导入时。在某些情况下,最多可以有 4 个 configs.yml 文件。以下面的网址为例:

http://testing.docs.tld.com http://testing.docs.tld.com

配置设置当前的工作原理如下(并且它有效)

  1. tld.com - 全局配置位于 /app/config/config.yml
  2. 测试 - 环境配置位于 /app/config/config_testing.yml。此配置还在同一目录中导入 config_dev.yml。
  3. 文档 - 应用程序配置位于 /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 中不起作用,因此我假设路由器在该阶段未处于活动状态。

有人有主意吗?我将非常感激。


我有同样的需求,所以我们这样做:

/apps/config
/apps/config/common_config.yml
/apps/config/common_routing.yml
/apps/config/...

/apps/myapp1
/apps/myapp1/myapp1Kernel.php
/apps/myapp1/...
/apps/myapp1/config
/apps/myapp1/config/config.yml
/apps/myapp1/config/routing.yml
/apps/myapp1/config/...

/apps/myapp2
/apps/myapp2/myapp1Kernel.php
/apps/myapp2/...
/apps/myapp2/config
/apps/myapp2/config/config.yml
/apps/myapp2/config/routing.yml
/apps/myapp2/config/...

...

在每个应用程序的 yml 文件中,我们有:

/apps/myapp1/config/config.yml

imports:
    - { resource: "../../config/common_config.yml" }

然后,你必须在 /web 中以相同的方式重现

/web/myapp1/app.php

谁将调用您的应用程序

$kernel = new myapp1Kernel('prod', false);
$kernel->loadClassCache();
Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony2 用于子域路由的多个配置和路由文件 的相关文章

随机推荐