无法从类中加载swiftmailer。我收到错误:Class" Swift_SmtpTransport"找不到

时间:2016-10-08 05:52:15

标签: php swiftmailer spl-autoload-register

我正在实施一个邮件解决方案,如果我从主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);
}

执行后,我得到:Class" Swift_SmtpTransport"未找到。加载库是因为我在netbeans上下文帮助中获取了所有Swift类列表。但是,执行后我得到了错误。我已经完成了所有可能的拼写检查。从这里开始无处可去。请帮忙。

1 个答案:

答案 0 :(得分:1)

看起来您的swiftmailer类Swift()已加载但其不完整。您可以采取以下方法之一来解决此问题:

  1. 将“extends Swift”添加到文件Mailer.php。

    中的类声明中

    class Mailer extends Swift {

  2. 或者,

    1. 将swiftmailer库加载到Mailer类的construct()函数中。

      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'; }

    2. 使用第一种使用spl_autoload_函数的方法,除非你想让swiftmailer远离主应用程序进入托管类。如果您想切换到另一个邮件程序,这可以派上用场。你不必对controller.php等进行更改。