シェアする

  • このエントリーをはてなブックマークに追加

[CakePHP]DebugKitとQdmailを一緒に使うときの注意

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との共存もできるような気がするのですが、誰か実現しましたら教えてくださいませ(笑)

  1. 他にもすごくたくさん素晴らしい機能があります。文字化けしないとか、携帯の絵文字に対応してるとか、添付ファイルも簡単に添付できたり、HTMLメールも簡単につくれたり、何でもできちゃう []
  2. Qdmail::text()で本文をセットするのは問題ないのですがQdmail::cakeText()で本文をセットしようとするとエラーが出てメール送信できません []

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. RND より:

    自分も同じ症状で困っていましたが、解決したので共有します。
    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;