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

¿Fue útil?

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/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top