Mudar de banco de dados no Zend Framework

  • Autor Autor Eru Iluvatar
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
E

Eru Iluvatar

Curioso
Usuário com poucas negociações! Use sempre o saldo do ForoBeta!
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
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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!
 

Tópicos similares

Voltar
Topo