基于SaaS的CakePHP动态数据库登录的最佳方法

时间:2012-12-24 19:34:49

标签: cakephp cakephp-2.0 cakephp-2.1

我正在尝试使用CakePHP应用程序来设计基于SaaS的系统的最佳方法。我目前正在使用基于Croogo的CakePHP应用程序。我们一直在为每个客户端部署一个应用程序。我们要做的是设置一个单独的环境,在此环境中,基于初始登录,使用不同的(客户端)数据库。因此,理想情况下,CakePHP应用程序将显示登录屏幕(使用默认的客户端数据库)。基于登录,根据返回的结果动态切换正在使用的数据库。这样它就是一个应用程序,没有子域名或文件夹。我甚至不确定这是否可行。

我认为这会发生在登录后的“UsersController”中,钩子,切换数据库......?

提前致谢!

1 个答案:

答案 0 :(得分:1)

你应该注意到有一个ConnectionManager类来处理Models和数据库之间的链接。该类使用config / database.php文件的DATABASE_CONFIG类中提供的数据。

我想说在建立连接之前会有一个很好的选择。例如,在DATABASE_CONFIG的__construct上。类似的东西:

class DATABASE_CONFIG {

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'password',
    'database' => 'database',
    'prefix' => '',
    //'encoding' => 'utf8',
);

public $test = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'user',
    'password' => 'password',
    'database' => 'test_database_name',
    'prefix' => '',
    //'encoding' => 'utf8',
);
public __construct(){
    App::uses('CakeSession');
    $database = CakeSession::read('Auth.User.database');
    if ($database){
        $this->default['database'] = $database;
    }

}

}