Conexión dinámica de CAKEPHP DB
-
25-10-2019 - |
Pregunta
Tengo una aplicación en la que cada suscriptor obtiene su propia carpeta de 'aplicación' dentro de su propia URL, por ejemplo.
www.domain.com/1234 subscriber1
www.domain.com/2345 subscriber2
Ahora la conexión DB está configurada en una clase en config/database.php. Quiero poder cambiar la base de datos utilizada en función de la URL (por ejemplo, /1234 = DB_1234).
¿Cómo lograría esto?
Gracias
Por cierto, estoy usando CakePhp 2.0
Solución
Mi solución anterior era una carga de basura. Así que pensé en atacar el problema desde un ángulo diferente. Mi Base de datos_config clase (/app/config/database.php) Ahora se ve así:
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => '127.0.0.1',
'login' => 'xxxx',
'password' => 'xxxx',
'database' => 'xxxx',
'prefix' => '',
'encoding' => 'utf8',
);
public $site_one = array(
'datasource' => 'Database/Mysql',
'host' => '127.0.0.1',
// ...
);
public $site_two = array(
'datasource' => 'Database/Mysql',
'host' => '127.0.0.1',
// ...
);
public function __construct()
{
if (strpos(env('HTTP_HOST'), 'site_one') !== false) {
// use site_one database config
$this->default = $this->site_one;
// elseif site_two
} elseif (strpos(env('HTTP_HOST'), 'site_two') !== false) {
// use site_two database config
$this->default = $this->site_two;
}
}
}
Cuando se carga la torta, la construcción ahora se llama automáticamente, y esto establece la conexión de base de datos 'predeterminada' que depende del host.
Otros consejos
Ah, lo tengo ahora
Pensé que Database_Config se llamaba estáticamente, así que no pensé en usar la construcción.
www.domain.com/12345678
function __construct() {
// get folder
if(substr(php_sapi_name(), 0, 3) == "cli") {
$j = explode("/", $_SERVER['PWD']);
$this->default['database'] = "sa_".$j[count($j)-1];
} else {
$j = explode("/", $_SERVER['REQUEST_URI']);
$this->default['database'] = "sa_".$j[1];
}
}
Pero el horno de línea de comandos debe hacerse en la carpeta, por ejemplo. 12345678/