我正在实现一个邮件解决方案,如果我从主index.php文件中调用swiftmailer,如:
require_once '../swiftmailer/lib/swift_required.php';
...
$result = $mailer->send($message);
一切都好。但是当我在我的应用程序类中使用相同的swiftmailer库来实现布局/设计分区时,像这样:
// File: controller.php
class Index {
...
public function ignition() {
...
spl_autoload_register(array($this, 'myClassLoaderFx'));
}
public function myClassLoaderFx($name) {
$classes = array(
'Blah' => '../blah/Blah.php',
...
'Swift' => '../swiftmailer/lib/swift_required.php'
);
if(!array_key_exists($name, $classes)){
die('Class not found');
}
require_once $classes[$name];
}
// File: Mailer.php
class Mailer {
...
public function main($recepient[], $sender, $subject, $body) {
...
$transport = Swift_SmtpTransport::newInstance('xyz.google.com', 465, "ssl")->setUsername($this->username)->setPassword($this->password);
...
$result = $mailer->send($message);
}
执行后,我得到:类"Swift_SmtpTransport"未找到。加载库是因为我在netbeans上下文帮助中获得了所有Swift类列表。但是,在执行时,我得到了错误。我已经做了所有可能的拼写检查。从现在开始什么都做不了。请帮助。
看起来你的swiftmailer类Swift()是加载的,但它不完整。您可以采用以下方法之一来解决此问题:
-
在Mailer.php文件的类声明中添加"extends Swift" .
class Mailer extends Swift {
或
-
在Mailer类的construct()函数中加载swiftmailer库
Remove the following line from myClassLoaderFx() function from controller.php : 'Swift' => '../swiftmailer/lib/swift_required.php'
And Create a construct for Mailer() class in file Mailer.php public function __construct(){ require_once '../swiftmailer/lib/swift_required.php'; }
使用第一种方法,使用spl_autoload_函数,除非你想让swiftmailer远离主应用程序,进入一个托管类。如果您想切换到另一个邮箱,这可以派上用场。你不需要修改controller.php等