我们正在构建一个Symfony2应用程序,它将使用子域服务于不同的部分:
我们如何做到这一点是为每个子域创建一个app目录,并将标准/ app目录保存为中央共享配置。每个应用程序的Web目录中都有一个自定义引导程序。使用.htaccess相应地路由子域。
我遇到的问题是多个配置文件进来的地方,特别是当他们有自己的路由导入时。在某些情况下,最多可以有4个configs.yml文件。以下面的URL为例:
配置设置目前的工作原理如此(并且可以正常工作)
这些都是在/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文件中导入路由文件的方法。我只能找到this,它没有准确解释应该在什么时候使用(或在哪里)。它在包含配置的AppKernal中不起作用,所以我假设路由器在那个阶段没有活动。
有人有什么想法吗?我会非常感激。
答案 0 :(得分:4)
我有同样的需要所以我们这样做:
/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);