2015-10-19 104 views
0

我有3個類型的數據庫:動態連接2

  • 認證介紹DB(固定地址和固定模式)

  • 配置DB(固定地址和固定模式)

  • 服務DB中(動態地址和動態模式基於每個服務)

用戶登錄並通過驗證DB驗證後。

基於在配置DB信息存儲在ZF2應用程序的所有行動涉及到要對相關服務的DB完成的服務。

ZF2是否支持這種情況?我該如何解決這個問題?


下面的代碼是我的global.php和local.php。

global.php

return array(
    'db' => array(
     // primary database 
     'driver' => 'Pdo', 
     'dsn'  => 'mysql:host=xxx.xxx.xxx.xxx;dbname=db_authen', 
     'driver_options' => array(
      PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'", 
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
     ), 
     // other database 
     'adapters' => array(
      'db_config' => array(
       'driver'   => 'Pdo', 
       'dsn'   => 'mysql:host=yyy.yyy.yyy.yyy;dbname=db_config', 
       'driver_options' => array(
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'", 
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
       ), 
      ), 
     ), 
    ), 
    'service_manager' => array(
     // primary database 
     'factories' => array(
      'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', 
      'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory' 
     ), 
     // other database 
     'abstract_factories' => array(
      'Zend\Db\Adapter\AdapterAbstractServiceFactory', 
     ), 
    ), 
); 

local.php

return array(
    'db' => array(
     // primary database 
     'username' => '*****', 
     'password' => '*****', 

     // other database 
     'adapters' => array(
      'db_config' => array(
       'username' => '*****', 
       'password' => '*****', 
      ), 
     ), 
    ), 
); 

感謝,

+0

http://stackoverflow.com/a/14012520/131824 –

+0

@DavidWeinraub:我也許錯了,但我認爲,答案使用靜態聲明(服務器主機和模式是固定的)地方。 php和global.php。 – PhatHV

+0

是的,你可能是對的:多個適配器,但仍然是靜態的。您的需求是針對服務數據庫的動態適配器,對嗎?我可能會使用從Config DB獲得的信譽手動實例化這些動態適配器。但是,至少要告訴服務經理如何創建一個適配器*工廠*(您可以傳遞動態信用)來創建適配器。 –

回答

1

後,你做你對(靜態配置)驗證數據庫認證和諮詢(靜態配置)配置數據庫以獲取服務數據庫所需的動態信息,您可以使用類似如下的方法實例化自己的服務數據庫的正確數據庫適配器:

// Config from the Config DB, packaged into an array with keys that 
// are expected by \Zend\Db\Adapter\Adapter 
$config = [ 
    'driver' => 'Pdo_Mysql', // for example 
    'user' => 'my-dynamically-obtained-user', 
    'password' => 'my-dynamically-obtained-password', 
    'database' => 'my-dynamically-obtained-db-name', 
    // etc 
]; 
$adapter = new \Zend\Db\Adapter\Adapter($config); 

// Now use the $adapter to build queries 
$statement = $adapter->query('SELECT * FROM `mytable`'); 
$results = $statement->execute(); 

// iterate over the results, etc. 

或者,你可以養活$adapter爲您創建隱藏從消費者的特定數據庫查詢詳細信息的模型對象。

ZF2 docs for \Zend\Db\Adapter\Adapter