【问题标题】:cakephp dynamic db connectioncakephp动态数据库连接
【发布时间】:2011-11-29 08:28:24
【问题描述】:

我有一个应用程序,每个订阅者在他们自己的 url 中都有自己的“应用程序”文件夹,例如。

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

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

我将如何实现这一目标?

谢谢

顺便说一句,我使用的是 CakePHP 2.0

【问题讨论】:

标签: cakephp cakephp-2.0


【解决方案1】:

我之前的解决方案是一堆垃圾。所以我想从不同的角度来解决这个问题。我的 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 加载时,现在会自动调用该构造,这会根据主机设置“默认”数据库连接。

【讨论】:

  • 完全更新了我的答案,尝试了不同的方法。希望对您有所帮助。
  • 它是我所追求的,但您仍在对配置文件中的连接变量进行硬编码。是否可以根据文件夹名称在页面加载时动态设置主机?
  • @khany 什么主机?数据库主机?您可以更改 __construct() 中的逻辑做任何您需要的事情。
【解决方案2】:

啊,我明白了,

我认为 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    相关资源
    最近更新 更多