我有一个应用程序,每个订阅者都在自己的网址中获取自己的“app”文件夹,例如
www.domain.com/1234 subscriber1
www.domain.com/2345 subscriber2
现在,在config / database.php的类中配置了db连接。我希望能够根据url更改使用的数据库(例如。/ 1234 = db_1234)。
我将如何实现这一目标?
由于
BTW我正在使用CakePHP 2.0
答案 0 :(得分:2)
我以前的解决方案是一堆垃圾。所以我想从不同的角度来解决这个问题。我的 DATABASE_CONFIG 类(/ app / Config / database.php)现在看起来像这样:
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;
}
}
}
当Cake加载时,现在会自动调用该构造,并设置依赖于主机的“默认”数据库连接。
答案 1 :(得分:0)
我现在知道了,
我认为DATABASE_CONFIG是静态调用的,因此没有想到使用该构造。
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];
}
}
但必须在文件夹中完成命令行烘焙,例如。 12345678 /