1

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

我认为这会发生在UsersController“登录后”挂钩的某个地方,切换数据库......?

提前致谢!

4

1 回答 1

1

那么你应该注意到有一个类 ConnectionManager 处理模型和数据库之间的链接。此类使用 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;
    }

}

}
于 2012-12-27T13:46:19.493 回答