Tengo que lanzar un web para varios países y aprovecharé la potencia de CakePHP para realizar una sola plataforma con varias bases de datos. Cada base de datos almacenará el contenido local de cada web.
Lo que he hecho es en /(app)/config/bootstrap.php incluir mi código de configuración personalizado. Ver funcionalidad del boostrap
Para determinar y estandarizar la url que me llega realizo la siguiente comprobación
$datos_dominio = explode(".",$_SERVER['HTTP_HOST']);
if (in_array("www",$datos_dominio))
{
$dominio ='';
}
else
{
$dominio = 'www.';
}
for($i=0;$i < count($datos_dominio);$i++)
{
if($i == 0)
{
$dominio .= $datos_dominio[$i];
}
else
{
$dominio .= '.'.$datos_dominio[$i];
}
}
?>
Con el dominio que he obtenido lo paso por un switch case y la variable final con el valor de la base de datos la guardo en una constante que usaré mas adelante.
switch ($dominio)
{
case 'www.cake.loc':
$bbdd = 'default';
break;
case 'www.cake.loc.uk':
$bbdd = 'default_uk';
break;
case 'www.cake.loc.mx':
$bbdd = 'default_mx';
break;
default: $bbdd = 'default';
}
define('BBDD',$bbdd);
Posteriormente en mi modelo seleccionaré la base de datos que se ha guardado automaticamente en la constante BBDD
Ejemplo de mi /(app)/models/contenido.php
class Contenido extends AppModel
{
var $name = 'mos_content'; // nombre de la tabla que estoy usando
var $useDbConfig = BBDD; // conexión a la base de datos que he obtenido automaticamente
}