在 cakephp3 中,我使用的是 debugkit。我的目标是创建一个新的 Mailer 传输类,它将传出的电子邮件存储在数据库中,以防止它在调试模式下发送出去。
我已经把我的运输类放在
src/Mailer/Transport/DbMailTransport.php
在此之后,我将此类设置为默认 Mailer 传输。
Email::configTransport('default', [
'className' => 'DbMail',
'host' => '',
'port' => false,
'timeout' => false,
'username' => '',
'password' => '',
'client' => null,
'tls' => true,
'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
]);
尝试发送电子邮件时出现以下错误:
Fatal error: Cannot declare class Cake\Mailer\Transport\DbMailTransport, because the name is already in use in /src/Mailer/Transport/DbMailTransport.php on line 0
在进一步挖掘调试 $_transportConfig 的代码后,我得到了以下变量:
array(1) {
["default"]=>
array(11) {
["className"]=>
string(17) "DebugKit.DebugKit"
["host"]=>
string(0) ""
["port"]=>
bool(false)
["timeout"]=>
bool(false)
["username"]=>
string(0) ""
["password"]=>
string(0) ""
["client"]=>
NULL
["tls"]=>
bool(true)
["url"]=>
NULL
["originalClassName"]=>
string(6) "DbMail"
["debugKitLog"]=>
object(ArrayObject)#184 (1) {
["storage":"ArrayObject":private]=>
array(0) {
}
}
}
}
所以类名是“DebugKit.DebugKit”而不是“DbMail”。在 bootstrap.php 中关闭 DebugKit 后,我得到了正确的类名:
array(1) {
["default"]=>
array(9) {
["className"]=>
string(6) "DbMail"
["host"]=>
string(0) ""
["port"]=>
bool(false)
["timeout"]=>
bool(false)
["username"]=>
string(0) ""
["password"]=>
string(0) ""
["client"]=>
NULL
["tls"]=>
bool(true)
["url"]=>
NULL
}
}
我的传输类按预期工作,将传出的电子邮件保存到数据库中,很明显是调试包引起了问题。知道如何解决这个问题吗?