CakePHP collegamento db dinamico
-
25-10-2019 - |
Domanda
Ho una domanda in cui ogni abbonato riceve la propria cartella 'app' all'interno del loro proprio URL ad es.
www.domain.com/1234 subscriber1
www.domain.com/2345 subscriber2
Ora la connessione db è configurato in una classe in config / database.php. Voglio essere in grado di cambiare il database utilizzato in base l'URL (ad es. / 1234 = db_1234).
Come faccio a ottenere questo?
Grazie
A proposito sto utilizzando CakePHP 2.0
Soluzione
La mia soluzione precedente era un carico di rifiuti. Così ho pensato di attaccare il problema da una diversa angolazione. Il mio DATABASE_CONFIG della classe (/ app / config / database.php) appare come segue:
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;
}
}
}
Quando carichi torta, il costrutto è ora chiamato automaticamente, e questo imposta la connessione al database 'default' dipende dal host.
Altri suggerimenti
Ah ho capito ora,
Ho pensato DATABASE_CONFIG è stato chiamato in modo statico in modo da non pensare di utilizzare il costrutto.
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];
}
}
ma a riga di comando deve essere fatto cuocere nella cartella esempio. 12345678 /