불행히도 여러 DB를 사용해야하는 응용 프로그램을 작성 중입니다. 나는이처럼 내 구성 \ 자동로드 \의 global.php 파일 어댑터를 구성하고 싶습니다 : 당신은 내가 원하는 방법zend 2 : 자동로드 구성에서 데이터베이스 어댑터 구성
그래서'appDomain1' => array(
'Db1' => array(
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=db1;host=myserver',
'username' => 'red',
'password' => '123456',
),
'Db2' => array(
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=db2;host=myserver',
'username' => 'red',
'password' => '123456',
),
'Db3' => array(
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=db3;host=myserver',
'username' => 'red',
'password' => '123456',
),
),
'appDomain2' => array(
'Db5' => array(
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=db5;host=myserver',
'username' => 'red',
'password' => '123456',
),
'Db6' => array(
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=db6;host=myserver',
'username' => 'red',
'password' => '123456',
),
'Db7' => array(
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=db7;host=myserver',
'username' => 'red',
'password' => '123456',
),
),
'db' => array(
//Default adapter
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=defaultDB;host=myserver',
'username' => 'red',
'password' => '123456',
//'driver_options' => array(
// PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
//),
'adapters' => array(
'appDomain1',
'appDomain2',
),
),
을 볼 수 있습니다 (아래의 코드가 작동하지 않습니다) 논리적으로 그룹 내 데이터베이스 어댑터와 그런 다음 'db'구성의 '어댑터'배열로 전달하십시오.
$config = $this->getServiceLocator()->get('config');
$appDomain1 = $config['appDomain1'];
난 그냥 내 위의 코드에서처럼 그들을에 전달할 수 없습니다 : 다음과 같이 (그들을 통해 루프) 서비스 관리자의 설정에 자신의 논리적 그룹을 통해 내 어댑터를 참조 할 수 있기 때문에 유리하다 왜냐하면 어댑터 배열은 내 'appDomain1'및 'appDomain2'배열과 같은 중첩 배열을 기대하지 않기 때문입니다.
내 어댑터를 어떻게 논리적으로 그룹화 할 수 있습니까?
편집 : 다음 해결책을 생각해 냈지만 확실하지는 않습니다. 난 그냥 어댑터 배열에 중첩 된 배열로 내 자신의 사용자 지정 키를 던져 그것을 사용할 수있는 발견 (이것은 나쁜 생각입니까?).
는 지금은 자동로드에서 내 global.php의 \의 local.php 파일에 다음을하고 있어요 :
'db' => array(
//Default adapter
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=defaultDB;host=myserver',
'username' => 'red',
'password' => '123456',
//'driver_options' => array(
// PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
//),
'adapters' => array(
'Db5' => array(
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=db5;host=myserver',
'username' => 'red',
'password' => '123456',
'myAppType' => 'appDomain1',
),
'Db6' => array(
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=db6;host=myserver',
'username' => 'red',
'password' => '123456',
'myAppType' => 'appDomain2',
),
'Db7' => array(
'driver' => 'Pdo_Mysql',
'dsn' => 'mysql:dbname=db7;host=myserver',
'username' => 'red',
'password' => '123456',
'myAppType' => 'appDomain3',
),
),
),
이제
나는 정의 'myAppType'=> 'appDomainX' 키 I 추가 픽업 할 수 있습니다 다음과 같이하십시오 :
$dbAdapters = $this->getServiceLocator()->get('config')['db']['adapters'];
foreach ($dbAdapters as $dbAdapter) {
if (array_key_exists('myAppType', $dbAdapter)) {
if ($dbAdapter['myAppType'] === 'appDomain2') {
var_dump($dbAdapter);
}
}
}
실용적인 해결책입니까? 나에게 잘 보이지만, 이것이 nono가 아닌지 확인하고 싶다.