我正在尝试使用CakePHP应用程序来设计基于SaaS的系统的最佳方法。我目前正在使用基于Croogo的CakePHP应用程序。我们一直在为每个客户端部署一个应用程序。我们要做的是设置一个单独的环境,在此环境中,基于初始登录,使用不同的(客户端)数据库。因此,理想情况下,CakePHP应用程序将显示登录屏幕(使用默认的客户端数据库)。基于登录,根据返回的结果动态切换正在使用的数据库。这样它就是一个应用程序,没有子域名或文件夹。我甚至不确定这是否可行。
我认为这会发生在登录后的“UsersController”中,钩子,切换数据库......?
提前致谢!
答案 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;
}
}
}