前提
mysqlを使っているがスキーマがお客さん(法人)ごとにあって、
ログイン情報によって切り替えないといけない。
原因
app.phpにDBの設定をdefaultだけしておいて、後で動的に変更する場合に
debug_kitが動く前に設定してないこと
最初は、
共通のコントローラで複数あるスキーマをConnectionManager::setConfig()
で登録しておいて、Model.initializeが動くタイミングでEntity.setConnection
していた
対策
https://github.com/cakephp/debug_kit/blob/7672bb9688465ac263a65468102307bf506069bc/src/Panel/SqlLogPanel.php#L46
ConnectionManager::configured();
が動く前には設定を終わらせてないといけない
それにはどうするか
EventManager::instance()->on('Server.buildMiddleware', function ($event, $queue) use ($service) {
$middleware = new DebugKitMiddleware($service);
$queue->insertAt(0, $middleware);
});
debug_kitでは「Server.buildMiddleware」という遅い段階で動くイベントで、insertAt(0, $middleware);で先頭にミドルウェアを登録される。
なので、Application.phpでミドルウェア登録してもだめ。
bootstrap.phpでべたっと書いてもいいけどかっこ悪い。
app.phpはcakeのormが使えないのでソースが汚くなる。
ということで、Server.buildMiddlewareを設定する処理を作成して、
debug_kitプラグインが読み込まれた後で、設定する