cakephp3を使用してシステムを作成しています。
ログイン画面でログインを行い、
ユーザーが登録されている場合にログイン後のページへ遷移するような画面があります。
データベースやファイルアップロード時のフォルダのパスは複数の団体ごとにわけて管理をしますが、
システム自体は1つのため、ログイン画面のurlを「https://teratail.com/?id=1」「https://teratail.com/?id=2」
のように「id」を設定することでどの団体かを判断するようにしようとしています。
その場合、idが1の団体はAAAのデータベースを使用する、
idが2の団体はBBBのデータベースを使用する、というような仕組みの実装方法が分かりません。
https://wakubeku.com/?p=65
サーバが異なる場合、こちらのサイトを参考に、
下記のように「app.php」でデータベースの繋ぐ先を複数設定できることは分かりました。
php
1public static function defaultConnectionName() 2{ 3 return empty(env('CAKEPHP_ENV'))?'default':env('CAKEPHP_ENV'); 4}
php
1 'Datasources' => [ 2 'aaa' => [ 3 'className' => Connection::class, 4 'driver' => Mysql::class, 5 'persistent' => false, 6 'host' => 'localhost', 7 //'port' => 'non_standard_port_number', 8 'username' => 'my_app', 9 'password' => 'secret', 10 'database' => 'AAA', 11 //'encoding' => 'utf8mb4', 12 'timezone' => '+09:00', 13 'cacheMetadata' => true, 14 'quoteIdentifiers' => false, 15 'log' => false, 16 //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], 17 'url' => env('DATABASE_TEST_URL', null), 18 ], 19 /** 20 * The test connection is used during the test suite. 21 */ 22 'bbb' => [ 23 'className' => Connection::class, 24 'driver' => Mysql::class, 25 'persistent' => false, 26 'host' => 'localhost', 27 //'port' => 'non_standard_port_number', 28 'username' => 'my_app', 29 'password' => 'secret', 30 'database' => 'BBB', 31 //'encoding' => 'utf8mb4', 32 'timezone' => '+09:00', 33 'cacheMetadata' => true, 34 'quoteIdentifiers' => false, 35 'log' => false, 36 //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], 37 'url' => env('DATABASE_TEST_URL', null), 38 ],
ですが、今回のシステムではどの団体も接続するサーバは同じため、
下記のように判断するのかなと考えています。
php
1public static function defaultConnectionName() 2{ 3 // idを取得する処理 4 5 $database = "default"; 6 if (『idが1の場合』) { 7 $database = "aaa"; 8 } else if(『idが2の場合』) { 9 $database = "bbb"; 10 } 11 return $database; 12}
ですが、controllerでなくTableクラスでidを取得する方法も分からず、
さらに全てのTableでオーバーライドを行うのも手間のように思っています。
envファイルや「path.php」などで共通で切り替えを行うようなことはできないのでしょうか?
データベースだけでなく、「path.php」のパスについても一括で切り替えを行うような仕組み、などはありますでしょうか?
アドバイスいただければと思います。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/25 02:18