0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Model.initializeイベントでsetConnectionを使いDBを切り替えるとDebug_kitでsqlログが見れない

Posted at

前提

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プラグインが読み込まれた後で、設定する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?