Múltiples esquemas de conexión a Base de Datos en CakePHP

A la hora de pasar una web de desarrollo a producción o para “testearla” en el servidor final hemos de modificar algún valor en nuestro archivo core.php y poner los valores específicos del servidor en el database.php.

Existen muchas maneras de conseguir agilizar un poco este proceso y una de ellas que me ha gustado a la hora de no tener que modificar el archivo database.php es añadiendo un contructor a la clase DATABASE_CONFIG (dentro de database.php) que en función de algún parámetro haga que nuestra aplicación use una o otra conexión:

function __construct() {
    switch(Configure::read('WebApp.mode')) {
        case "Production":
            $this->default = $this->production;
            break;
        default:
        case "Develop":
            $this->default = $this->develop;
            break;
        }
}

El siguiente paso será definir $this->develop y $this->production en la clase y asignar $this->default a null, quedando nuestra clase de la siguiente manera:

class DATABASE_CONFIG {
    var $default = null;
    var $production = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => '',
        'login' => '',
        'password' => '',
        'database' => '',
        'prefix' => '',
        );
    var $develop = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => '',
        'login' => '',
        'password' => '',
        'database' => '',
        'prefix' => '',
        );

    function __construct() {
        switch(Configure::read('WebApp.mode')) {
            case "Production":
                $this->default = $this->production;
                break;
            default:
            case "Develop":
                $this->default = $this->develop;
                break;
         }
    }
}

Sólo nos queda declarar la variable de configuración WebApp.mode en nuestro archivo core.php o en bootstrap.php, tal que así:

Configure::write('WebApp.mode','Develop'); //'Production'

Tags:

Leave a Reply