1

CakePHP アプリケーションを使用して SaaS ベースのシステムを設計するための最良のアプローチを決定しようとしています。現在、Croogo ベースの CakePHP アプリを使用しています。各クライアントにアプリをデプロイするだけです。私たちがやりたいことは、最初のログインに基づいて、別の (クライアント) データベースが使用される単一の環境をセットアップすることです。したがって、理想的には、CakePHP アプリは (クライアントのデフォルト データベースを使用して) ログイン画面を表示します。ログインに基づいて、返された結果に基づいて使用中のデータベースを動的に切り替えます。このように、1 つのアプリであり、サブドメインやフォルダーはありません。ただし、これが可能かどうかはわかりません。

これは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 に答える