cakephp动态数据库连接

时间:2011-11-29 08:28:24

标签: cakephp cakephp-2.0

我有一个应用程序,每个订阅者都在自己的网址中获取自己的“app”文件夹,例如

www.domain.com/1234 subscriber1
www.domain.com/2345 subscriber2

现在,在config / database.php的类中配置了db连接。我希望能够根据url更改使用的数据库(例如。/ 1234 = db_1234)。

我将如何实现这一目标?

由于

BTW我正在使用CakePHP 2.0

2 个答案:

答案 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 /