2017-01-16 39 views
1

可以在symfony中加載不同的parameters.yml嗎?我有一個SaaS多租戶應用程序,我希望基於每個租戶加載不同的parameters.yml(帶有配置DB),以便在登錄操作時將用戶分配到正確的數據庫。Symfony:可能會加載不同的parameters.yml?

非常感謝!

編輯:已解決!

我解決它安排不同租戶的配置文件夾中,如:

app 
---config 
------tenantA 
---------config.yml 
---------config_dev.yml 
---------config_prod.yml 
---------parameters.yml 
------tenantB 
---------config.yml 
---------config_dev.yml 
---------config_prod.yml 
---------parameters.yml 
------tenantC 
---------config.yml 
---------config_dev.yml 
---------config_prod.yml 
---------parameters.yml 
.... 

而且,修改kernelApp.php的裝載機:

$裝載機>負載($這個 - > getRootDir( )。/ config/TENANT /config_'.$this->getEnvironment().'.yml');

我不知道這是否是一種好的做法,但它工作正常!

+0

如果你想使用原則的遷移,你會碰到一個問題,因爲它是獨立於本配置的。 我有一個解決方案,如果你想去學說遷移,你可以在這裏閱讀它,並且我要感謝你,因爲你指出我使用多個數據庫和相同源的正確方向;-) https: //stackoverflow.com/questions/45633339/symfony3-doctrine-migration-with-multiple-databases – rebru

回答

0

這裏有幾種可能性。

如果房客的數量是一個常數或接近它(新租戶很少添加),您可以簡單地按照​​所述設置多個連接。之後,你可以通過調用

$em = $this->get('doctrine')->getManager($dynamicValue); 

下行這種方法獲取必要的EntityManager實例是,你必須修改每一個你需要創建/更新/刪除租戶的時間你config.yml

但是,如果你願意,你可以實現你自己的類來管理數據庫連接更加靈活的方法:

<?php 

namespace AppBundle\Service; 

use AppBundle\Entity\Database; 
use Doctrine\DBAL\Connection; 
use Doctrine\DBAL\DBALException; 
use Doctrine\DBAL\DriverManager; 

/** 
* Class ConnectionManager 
* @package AppBundle\Service 
*/ 
class ConnectionManager 
{ 
    /** 
    * @var Connection[] 
    */ 
    protected $connections = []; 

    /** 
    * @param Database $database 
    * @return Connection 
    * @throws DBALException 
    */ 
    public function getConnection(Database $database) 
    { 
     $params = [ 
      'dbname' => $database->getName(), 
      'user' => $database->getUser(), 
      'password' => $database->getPassword(), 
      'host' => $database->getHost(), 
      'driver' => 'pdo_mysql', 
     ]; 

     $key = $this->getKey($params); 
     if (isset($this->connections[$key])) { 
      return $this->connections[$key]; 
     } 

     $conn = DriverManager::getConnection($params); 
     $this->connections[$key] = $conn; 
     return $conn; 
    } 

    /** 
    * @param array $params 
    * @return string 
    */ 
    protected function getKey($params) 
    { 
     sort($params); 
     return md5(implode('.', $params)); 
    } 
} 
+0

謝謝@Andrey。我在symfony上尋找dispacht de「登錄」順序到正確的DB。我有很多數據庫(每個租戶都有一個數據庫),但是當用戶登錄symfony時,該命令在參數parameters.yml上確定DB。只是我在用戶登錄symfony之前尋找域加載正確的paratemers.yml。 (對不起我的英語:/) –

+0

@CarlosCarmona - 聽起來像你想根據請求不同的parameter.yml?不會發生。所有配置的東西都做了一次,然後緩存。每個請求都會一樣。你需要做這樣的回答。 – Cerad

+0

@Andrey我解決了它在(app/config/tenantX)的不同文件夾中安排不同的租戶配置,通過域的appKernel de corret環境加載。它工作正常! :) –

相關問題