cakephperさんがキャプチャつきで詳しく解説してくれているDebugKitですが、本当に便利で助かります。
良く今までこれを使わず開発してたな!と(笑)言うくらい便利。無いと困る、もう。
同じくCakePHPの超便利なコンポーネント、Qdmailというメール送信コンポーネントがあるのですが、Qdmailの素晴らしい機能のひとつ*1 としてCakePHPのレイアウトとエレメントを利用してメール本文を生成できるという点があります。
そのため、コントローラで$this->setした値をメール本文で容易に使えるというメリットがあるのですが、DebugKitとQdmailを併用するとこの機能に障害が出てしまいます*2 。
調べたところ、DebugKitが$this->viewの値を”View”→”DebugKit.Debug”に変えてしまうのがまずいようです。
ですので、とりあえずの対処としてメール送信を行うアクションでは、
$this->view = "View";
をセットして無理やりQdmail側のエラーを防ぐ形で対処しました。
もちろん、このアクションではDebugKitは使えなくなります。
core.phpのdebug値を0にすればDebugKitの効果が切れるので上記対処を行わなくても、debug値0なら問題ないと思いますが、開発中にメール送信を確認したい場合はとりあえず上記で対応できると思います。
恐らくQdmailをいじればDebugKitとの共存もできるような気がするのですが、誰か実現しましたら教えてくださいませ(笑)
コメント
自分も同じ症状で困っていましたが、解決したので共有します。
Controller::renderを参考にして修正しました。
@@ -3812,12 +3812,19 @@ class QdmailComponent extends QdmailUserFunc{
$target_charset = $this->charset_content;
}
if( !class_exists ( $this->Controller->view ) ){
– if( !$this->import( ‘View’ , $this->view ) ){
+ if( !$this->import( ‘View’ , $this->Controller->view ) ){
return $this->errorGather(‘QdmailCakePHP View Load Error , the name is \”.$this->view.’\”,__LINE__);
}
}
$type = strtolower( $type );
– $view = & new $this->Controller->view( $this->Controller , false );
+ $viewClass = $this->Controller->view;
+ if ($viewClass != ‘View’) {
+ if (strpos($viewClass, ‘.’) !== false) {
+ list($plugin, $viewClass) = explode(‘.’, $viewClass);
+ }
+ $viewClass = $viewClass . ‘View’;
+ }
+ $view = & new $viewClass( $this->Controller , false );
$view->layout = $this->layout;
$mess = null;