Cambiar de base de datos en Zend Framework

Eru Iluvatar Seguir

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
7 Oct 2009
Mensajes
4
Hola a todos tengo un problema que no he podido resolver con zend framework 1.7.2 lo que pasa es l o siguiente

tengo esta configuracion del bottstrap
PHP:
date_default_timezone_set('America/Argentina/Buenos_Aires'); 
set_include_path ( './' . PATH_SEPARATOR .  
                    '../application/default/models/'. PATH_SEPARATOR . 
                    '../application/default/models/beans/'. PATH_SEPARATOR . 
                    '../application/default/views/'. PATH_SEPARATOR .
                    '../application/default/utils/'. PATH_SEPARATOR .
                    '../library/'. PATH_SEPARATOR .
                    '../library/Core/'. PATH_SEPARATOR .
                    '../library/ZendX/'. PATH_SEPARATOR .
                    '../application/default/forms/' . PATH_SEPARATOR .
                    '../application/default/helpers/' . PATH_SEPARATOR .
                    '../config/' . PATH_SEPARATOR . 
                    get_include_path () );
                    
require_once 'Initializer.php';
require_once "Zend/Loader.php";

Zend_Loader::registerAutoload ();

$frontController = Zend_Controller_Front::getInstance ();

$frontController->registerPlugin ( new Initializer ( 'development' ) );

$frontController->dispatch ();

y en el plugin inizializer existe este metodo para inicializar la base de datos

PHP:
public function initDb() {
        if ($this->_config->enable_database) {
            $fileLogger = Zend_Registry::get ( 'fileLogger' );

            $options = array (Zend_Db::AUTO_QUOTE_IDENTIFIERS => true );
                        print_r($this->getInvokeArg('name'));
            try {
                $db = new Zend_Db_Adapter_Pdo_Pgsql ( 
                        array ('host' => $this->_config->database->host, 
                                'username' => $this->_config->database->user, 
                                'password' => $this->_config->database->pass, 
                                'dbname' => $this->_config->database->name, 
                                'options' => $options ) );
                $db->getConnection ();
                Zend_Db_Table::setDefaultAdapter ( $db );
                Zend_Registry::set ( "database", $db );
            } catch ( Zend_Db_Adapter_Exception $e ) {
                if ($this->_config->enable_file_logger) {
                    $fileLogger->log ( 'Database Error: ' . $e->getMessage (), 1 );
                }
            } catch ( Zend_Exception $e ) {
                if ($this->_config->enable_file_logger) {
                    $fileLogger->log ( 'Error: ' . $e->getMessage (), 1 );
                }
            }
            
        }
    
    }

lo que quisiera es pasarle un parametro al initializer para poder seleccionar una base de datos diferente segun la preferencia del usuario

es decir en una vista cuando el usuario le de a clic en CBBA seleccione la base de datos de CBBA y cuando le de a STZ seleccione esta base de datos, para ello debo tener los datos necesarios en un array de bases de datos.

ese precisamente es mi problema yo entiendo que zend al hacer Zend_Db_Table::setDefaultAdapter ( $db );
Zend_Registry::set ( "database", $db );

esta poniendo por defecto esa base de datos y que en los modelos se utilizara esta base de datos para las consultas
pero no se como hacerlo estare agradecido por la ayuda prestada
 

Daniel B.

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
25 Abr 2009
Mensajes
188
Recuerda que PHP es un lenguaje stateless, por lo que en cada request se ejecuta tu bootstrap, ahora para implementar lo que quieres es simple, solo estable una bdd por defecto, y haz una pagina donde puedas seleccionar que bdd usar y guardas en una sesión que bdd esta usando o en algún otro medio persistente (un archivo, base de datos, etc.).

Entonces solo es cuestión de comparar (ejemplo):
PHP:
$config = Peristence::getDBConfig();
if (!$config) {
       $config = $DBDefaultConfig;
}
 
// Inicias tu BDD y pones los datos.

Adiós, igual esto es una cita!
 
Arriba