ho trovato molto meglio spiegazione sul https://samsonasik.wordpress.com/2013/07/27/zend-framework-2-multiple-named-db-adapter-instances-using-adapters-subkey/
Zend Framework 2.2 viene fornito con abstract_factories Zend\Db\Adapter\AdapterAbstractServiceFactory
che ci permettono di configurare più istanze dell'adattatore DB denominate. Questo è passo dopo passo per farlo:
Registrati Zend\Db\Adapter\AdapterAbstractServiceFactory
al tipo ‘abstract_factories’ sotto chiave ‘service_manager’.
//config/autoload/global.php // .... parte di config/autoload/global.php 'service_manager' => array ( 'abstract_factories' => array ( 'Zend \ Db \ Adapter \ AdapterAbstractServiceFactory', ), ),
- sottochiave
Configurazione 'schede' sotto chiave 'db' a config/autoload/global.php
//config/autoload/global.php // .... parte di config/autoload/global.php
'db' => array(
'adapters' => array(
'db1' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=zf2_staging;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'db2' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=zf2_test;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
),
),
sottochiave
- Configura 'adattatori' sotto chiave 'db' a
config/autoload/local.php
//config/autoload/local.php
return array(
'db' => array(
'adapters' => array(
'db1' => array(
'username' => 'root',
'password' => '',
),
'db2' => array(
'username' => 'other_user',
'password' => 'other_user_passwd',
),
),
),
);
adattatore chiamata usando 'db1' o 'db2' come adattatore db da ServiceManager
$ SM-> get ('db1');
$ sm-> get ('db2');
Se avete bisogno di ottenere $sm->get(‘Zend\Db\Adapter\Adapter’)
adattatore come primaria, 'db1' e 'db2' come un altro adattatore per scopo specifico, allora avete bisogno di definire adattatore primario direttamente sotto db, quindi la configurazione di config/autoload/global.php
sarà come il seguente:
//config/autoload/global.php
return array(
'db' => array(
//this is for primary adapter....
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=zf21_learn;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
//other adapter when it needed...
'adapters' => array(
'db1' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=zf2_staging;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'db2' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=zf2_test;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
),
),
'service_manager' => array(
// for primary db adapter that called
// by $sm->get('Zend\Db\Adapter\Adapter')
'factories' => array(
'Zend\Db\Adapter\Adapter'
=> 'Zend\Db\Adapter\AdapterServiceFactory',
),
// to allow other adapter to be called by
// $sm->get('db1') or $sm->get('db2') based on the adapters config.
'abstract_factories' => array(
'Zend\Db\Adapter\AdapterAbstractServiceFactory',
),
),
);
il config/autoload/global.local.php
deve essere configurato anche come la seguente:
012.351.
//config/autoload/local.php
return array(
'db' => array(
// for primary db adapter that called
// by $sm->get('Zend\Db\Adapter\Adapter')
'username' => 'root',
'password' => '',
// to allow other adapter to be called by
// $sm->get('db1') or $sm->get('db2') based on the adapters config.
'adapters' => array(
'db1' => array(
'username' => 'root',
'password' => '',
),
'db2' => array(
'username' => 'other_user',
'password' => 'other_user_passwd',
),
),
),
);
ha questo tipo di strategia di cambiata a 2,1? – Saeven
Dopo un rapido sguardo su Zend \ Db \ Adapter \ AdapterServiceFactory non penso. – yechabbi
Nice 2.2 informazioni, grazie. – Xunnamius