Cannot load swiftmailer from inside a class. I get error : Class "Swift_SmtpTransport" not found
Cannot load swiftmailer from inside a class. I get error : Class "Swift_SmtpTransport" not found
我正在实施一个邮件解决方案,如果我从 index.php 主文件调用 swiftmailer,例如:
require_once '../swiftmailer/lib/swift_required.php';
...
$result = $mailer->send($message);
一切都很好。但是当我在我的应用程序 class 中使用相同的 swiftmailer 库来实现 layout/design 分区时,如下所示:
// 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);
}
执行后我得到:Class "Swift_SmtpTransport" 未找到。该库已加载,因为我在 netbeans 上下文帮助中获得了所有 Swift class 列表。但是,在执行时我得到了错误。我已经完成了所有可能的拼写检查。从此一事无成。请帮忙
看起来您的 swiftmailer class Swift() 已加载但不完整。您可以采用以下方法之一来解决此问题:
将 "extends Swift" 添加到文件 Mailer.php 中的 class 声明。
class Mailer extends Swift {
或者,
在 Mailer 的 construct() 函数中加载 swiftmailer 库 class。
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';
}
除非您想让 swiftmailer 远离主应用程序进入托管 class,否则请使用第一种使用 spl_autoload_ 函数的方法。如果您想切换到另一个邮件程序,这会派上用场。您不必更改 controller.php 等
我正在实施一个邮件解决方案,如果我从 index.php 主文件调用 swiftmailer,例如:
require_once '../swiftmailer/lib/swift_required.php';
...
$result = $mailer->send($message);
一切都很好。但是当我在我的应用程序 class 中使用相同的 swiftmailer 库来实现 layout/design 分区时,如下所示:
// 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);
}
执行后我得到:Class "Swift_SmtpTransport" 未找到。该库已加载,因为我在 netbeans 上下文帮助中获得了所有 Swift class 列表。但是,在执行时我得到了错误。我已经完成了所有可能的拼写检查。从此一事无成。请帮忙
看起来您的 swiftmailer class Swift() 已加载但不完整。您可以采用以下方法之一来解决此问题:
将 "extends Swift" 添加到文件 Mailer.php 中的 class 声明。
class Mailer extends Swift {
或者,
在 Mailer 的 construct() 函数中加载 swiftmailer 库 class。
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'; }
除非您想让 swiftmailer 远离主应用程序进入托管 class,否则请使用第一种使用 spl_autoload_ 函数的方法。如果您想切换到另一个邮件程序,这会派上用场。您不必更改 controller.php 等