簡體   English   中英

CakePhp:Cake Email AfterSend事件

[英]CakePhp: Cake Email AfterSend event

大家早上好,

我目前正在使用CakePHP。
我希望在CakePHP發送電子郵件后設置一個事件,因為我想在數據庫中存儲此電子郵件的日志,其中包含發件人,接收者,主題和正文的單獨列。
目前我正在使用本機日志系統(電子郵件的所有標題和正文在同一個地方),但是調試變得太亂了。

CakeEmail類不提供回調方法,我沒有找到任何方法來調用這種事件而不編輯CakeEmail類。
當然,我可以創建擴展本地CakeEmail類MyCakeEmail類,但這意味着要改變每一個新CakeEmail(),但在代碼中。

你有什么建議?
非常感謝!

(抱歉英文不好,不是我的母語)

使用自定義記錄器:

使用您想要的數據庫功能實現您自己的記錄器 ,並在引導程序中為電子郵件范圍配置它,這是電子郵件日志的默認范圍或更改電子郵件類配置中的整個日志記錄。 請參閱電子郵件類的這一部分。

1161:         $contents = $this->transportClass()->send($this);
1162:         if (!empty($this->_config['log'])) {
1163:             $config = array(
1164:                 'level' => LOG_DEBUG,
1165:                 'scope' => 'email'
1166:             );
1167:             if ($this->_config['log'] !== true) {
1168:                 if (!is_array($this->_config['log'])) {
1169:                     $this->_config['log'] = array('level' => $this->_config['log']);
1170:                 }
1171:                 $config = $this->_config['log'] + $config;
1172:             }
1173:             CakeLog::write(
1174:                 $config['level'],
1175:                 PHP_EOL . $contents['headers'] . PHP_EOL . $contents['message'],
1176:                 $config['scope']
1177:             );
1178:         }

使用你自己的課 - 但做得對

當然我可以創建一個擴展本地CakeEmail類的MyCakeEmail類,但這意味着在代碼中更改每個新的CakeEmail()。

那么你可以使用自己的電子郵件類。 但是在代碼中到處都是new SomeClass()在任何情況下都不是好事。 你只知道原因。 另一個不容易測試的原因。

而是在繼承鏈的上層(AppController,AppModel ...)的某些類中執行此操作:

public function getEmailInstance($config = null) {
    return new MyEmailClass($config);
}

這允許您簡單地“全局”更改類,並在測試中模擬方法。

如果您使用的是PHP 5.4(或5.5,現在還不確定),您也可以使用它的特性,並僅在需要該功能的類中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM