2016-07-11 3 views
0

cakephp에서 dunamic 연결을해야합니다. 3. configManager :: config에서 데이터베이스 이름을 전달할 때마다 데이터베이스 연결을 변경하고 싶습니다. 그리고 연결이 변경된 후 모든 컨트롤러에서 변경된 연결을 원합니다.cakephp의 동적 연결 3

AppBehavior의 코드는 다음과 같다

,

은 ConnectionManager :: 드롭 ('myconn1');

= $ 구성은 ConnectionManager :: 구성 ('myconn1'[

'className' => 'Cake\Database\Connection', 

'driver' => 'Cake\Database\Driver\Mysql', 

'persistent' => false, 

'host' => $databaseDetails['res_host'], 

'username' => $databaseDetails['res_login'], 

'password' => $databaseDetails['res_password'], 

'database' => $databaseDetails['res_database'], 

'encoding' => 'utf8', 
'timezone' => 'UTC', 
'cacheMetadata' => true, 

]); ConnectionManager :: get ('myconn1');

위의 코드를 AppBehavior에서 사용한 후에 모든 컨트롤러에서 새 연결을 사용해야합니다.

답변

0
public function ChangeClientConnection($databaseDetails) 
{ 
    if(isset($databaseDetails) && !empty($databaseDetails)) 
    { 
     ConnectionManager::drop('conn1');    

     $config = ConnectionManager::config('conn1', [ 
      'className' => 'Cake\Database\Connection', 
      'driver' => 'Cake\Database\Driver\Mysql', 
      'persistent' => true, 
      'host' => $databaseDetails['res_host'], 
      'username' => $databaseDetails['res_login'], 
      'password' => $databaseDetails['res_password'], 
      'database' => $databaseDetails['res_database'], 
      'encoding' => 'utf8', 
      'timezone' => 'UTC', 
      'cacheMetadata' => false, 

     ]);    
     $conn = ConnectionManager::get('conn1'); 
     ConnectionManager::alias('conn1', 'default'); 
    } 
    else 
    { 
     $conn = ConnectionManager::get('default'); 

    } 

    return $conn; 
}