2012-09-28 29 views
3

我們正在建設一個Symfony2的應用程序將使用子域名服務於不同的部分路由文件:Symfony2的多個配置和子站點的路由

  1. api.tld.com - API系統
  2. docs.tld.com - 文檔
  3. assets.tld.com - 系統提供圖片

我們做得怎麼樣,這是創建爲每個子域的應用程序目錄,並保持標準/ app目錄中地方作爲岑tral共享配置。每個應用程序的web目錄中還有一個自定義引導程序。子域使用.htaccess進行相應的路由。

我遇到的問題是多個配置文件進來,特別是當他們有自己的路由導入。在某些情況下,最多可以有4個configs.yml文件。看看下面的網址,例如:

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

這些都是進口的AppKernal在/app_docs/AppKernal.php:

// 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'); 

現在CONFIGS負荷剛精細。但是,我遇到的問題並沒有找到任何明確的文檔,這些配置中有多個配置定義了框架:router:resources。在上面的例子CONFIGS,這些被加載(試圖反正)如下:

/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% 

所有的configs的加載罰款。但是我發現只有最後一個路由文件被包含在內。所以我認爲規則是他們被覆蓋作爲一個規則,而不是擴展。

因此,我花了幾天的時間試圖發現,是否有可能以上述方式擴展配置文件中的路由文件?我調查的另一個選項是找到一種方法來在AppKernal文件中導入路由文件。我只能找到this,它不能準確解釋應該在什麼時候使用(或在哪裏)。它在包含配置的AppKernal中不起作用,所以我假設路由器在該階段不活躍。

任何人有任何想法?我會很感激。

+0

您是否嘗試刪除框架:從共享應用程序的配置並導入共享途徑像你這樣的包會的路線:路由器? –

+0

你能更新到2.2嗎?因爲那裏,路由框架知道主機要求。 http://symfony.com/doc/2.2/components/routing/hostname_pattern.html –

回答

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/... 

... 

而且在每個應用程序的文件陽明海運,我們有:

/apps/myapp1/config/config.yml

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

然後,你必須再現/網路的方式相同

/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);