2014-07-04 28 views
1

我在寫一個Web應用程序,它將爲每個客戶端提供他自己的數據庫(或模式,因爲我使用的是PostgreSQL)和子域。所以,我想基本上是:Symfony2/Doctrine與客戶端特定的數據庫

當然,我唐」 t計劃盲目地拋出URL參數,所以在檢查了有效性之後 - 並且考慮到我的所有代碼,模式等等對於所有客戶端都是相同的,並且要連接的數據庫是唯一的區別 - 有沒有辦法在不更新任何主配置文件的情況下完成此任務è?

我環顧了一段時間,發現一些解決方案不適用於我的方案,因爲他們要麼假定不同的捆綁使用不同的數據庫(我有一個捆綁使用不同的數據庫,取決於客戶端),要麼你可以簡單地配置幾個不同的實體管理器(我有很多客戶端,不只是5或10個)。

回答

0

您可以在您的進口就像一個PHP文件..

imports: 
     ... 
    - { resource: parameters.php } 
     .... 

然後在任何你用它來獲得子域和處理是和設置,如數據庫變量頁使用..

<?php 
require_once('a_file_that_generates_these_parameters.php') 

$container->setParameter('database_host', $dbHost); 
$container->setParameter('database_port', $dbPort); 
$container->setParameter('database_name', $dbName); 
$container->setParameter('database_user', $dbUser); 
$container->setParameter('database_password', $dbPass); 

然後可以在你的配置中使用它們,就像當前的parameters.yml中的細節一樣。喜歡..

# Doctrine Configuration 
doctrine: 
    dbal: 
     driver: %database_driver% 
     host:  %database_host% 
     port:  %database_port% 
     dbname: %database_name% 
     user:  %database_user% 
     password: %database_password% 
     .... 
+0

謝謝。這是做到這一點的一種方式,但我認爲它與Symfony的其餘部分不太一致。 我發現並改編了另一個解決方案,它發佈在這裏:http://stackoverflow.com/questions/15108732/symfony2-dynamic-db-connection-early-override-of-doctrine-service/24585284#24585284 如果任何人有更好的東西,我仍然很感興趣。 – Tom

+0

是的,它不是很漂亮,感覺很不好。 – qooplmao