En el arranque, puede establecer conexiones de base de datos:
protected function _initDb() {
$config['my_db1'] = new Zend_Config_Ini(APPLICATION_PATH . '/configs/my_db1.ini');
$config['my_db2'] = new Zend_Config_Ini(APPLICATION_PATH . '/configs/my_db2.ini');
$my_db1 = new Plugin_Replication($config['my_db1']->toArray());
$my_db1->query("SET CHARACTER SET utf8;");
$my_db2 = new Plugin_Replication($config['my_db2']->toArray());
$my_db2->query("SET CHARACTER SET utf8;");
Zend_Db_Table::setDefaultAdapter($dmy_db1);
Zend_Registry::set('my_db1', $my_db1);
Zend_Registry::set('my_db2', $my_db2);
}
Cada conexión se especifica en un archivo .ini por separado en mi caso. Encuentro esto bastante intuitivamente organizado. Un archivo ini de base de datos no requiere los nombres resources.db.whatever
. Mina algo así:
[Master]
host = "xxx"
username = "xxx"
password = "xxx"
dbname = "xxx"
charset = utf8
[Slaves]
first.host = "xxx"
first.username = "xxx"
first.password = "xxx"
first.dbname = "xxx"
first.charset = utf8
second.host = "xxx"
second.username = "xxx"
second.password = "xxx"
second.dbname = "xxx"
second.charset = utf8
Una vez que haya múltiples bases de datos configurado de esta manera, al crear un modelo (en cualquier módulo que desea), puede informar a ZF sobre la base de datos que desea utilizar:
protected function _setupDatabaseAdapter() {
$this->_db = Zend_Registry::get('my_db1');
}
Este será su adaptador predeterminado. En caso de tener que utilizar dos bases de datos en la misma consulta, iniciar la función de su modelo con:
public function myAwesomeSqlQuery() {
$db1 = $this->getAdapter()->getConfig(); //default adapter
$db2 = Zend_Registry::get('my_db2')->getConfig(); //additional adapter
Ahora, usted puede escribir su consulta utilizando las dos bases de datos de esta manera:
$sql = $this
->select()
->setIntegrityCheck(false)
->from(array('col1' => $db1['dbname'].'.some_column'))
->join(array('col2' => $db2['dbname'].'.some_other_column')),'col1.id = col2.id')
;
Como sugerí en un comentario, también puede usar bootstraps específicos del módulo. La estructura sería algo así:
/application/
-- /modules/
-- /v1/
-- /controllers/
-- /views/
-- /Bootstrap.php
-- /v2/
-- /controllers/
-- /views/
-- /Bootstrap.php
Los propios esfuerzos específicos del módulo se construyen más o menos como cualquier otra rutina de carga, pero afectan el módulo en cuestión. Los nombres de las clases generalmente tienen el prefijo de los nombres de los módulos, p.:
<?php
class V1_Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
...
}
por lo general trato de no usar ayuda de nadie específicos del módulo, ya que están todos en marcha con cada solicitud (Zend Framework 2 se supone que debe corregir este), funciones que no son necesarias para su funcionamiento módulo actual. De todos modos, he encontrado una rutina de carga específica del módulo en uno de mis módulos, que contiene algo como esto:
class MyModule_Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initLoggers() {
$my_db1 = Zend_Registry::get('my_db1');
$my_db2 = Zend_Registry::get('my_db2');
$my_db1->setProfiler(new Zend_Db_Profiler_Firebug())->getProfiler()->setEnabled(true);
$my_db2->setProfiler(new Zend_Db_Profiler_Firebug())->getProfiler()->setEnabled(true);
$auth = Zend_Auth::getInstance();
$columnMapping = array('priority' => 'priority' , 'message' => 'message' , 'timestamp' => 'timestamp' , 'username' => 'username');
$logger = new Zend_Log(new Zend_Log_Writer_Db($my_db1, 'logs', $columnMapping));
print_r($auth->getIdentity());
if ($auth->hasIdentity())
$logger->setEventItem('username', $auth->getIdentity()->username);
Zend_Registry::set('logger', $logger);
}
Eso es más o menos la misma. Espero que ayude.
necesita más información, ¿en qué línea obtiene el error? ¿Es un error fatal de PHP? – emaillenin
Creo que es solo un mensaje de error normal. Pero la ejecución se detuvo después del error. –
¿Desea agregar esto en el archivo /public/.htaccess: 'SetEnv APPLICATION_ENV" development "' Entonces cuéntenos los detalles del error. – Perfection