Не удается загрузить swiftmailer из класса. Я получаю сообщение об ошибке: Класс Swift_SmtpTransport не найден

Я реализую почтовое решение, где, если я вызову swiftmailer из основного файла index.php, например:

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» не найден. Библиотека загружается, потому что я получаю весь список классов Swift в контекстной справке netbeans. Но при выполнении получаю ошибку. Я сделал все возможные проверки орфографии. Отсюда никуда не деться. Пожалуйста помоги.


person Angle Speak    schedule 08.10.2016    source источник
comment
Ответ здесь: stackoverflow.com/questions/29626658/ использовал Swift_SmtpTransport::newyInstance() Я не против, если y является опечаткой или если вам нужно, чтобы y работало.   -  person Peavey2787    schedule 08.10.2016
comment
Я проверил опечатку, а также проверил имена функций. Никуда не дошел. Спасибо.   -  person Angle Speak    schedule 08.10.2016


Ответы (1)


Похоже, ваш класс Swift() загружен, но неполный. Вы можете воспользоваться одним из следующих подходов, чтобы решить эту проблему:

  1. Добавьте «extends Swift» в объявление вашего класса в файле Mailer.php.

    class Mailer extends Swift {

Or,

  1. Загрузите библиотеку swiftmailer в функциюstruct() класса Mailer.

    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 и т.д.

person Arpan Dubey    schedule 08.10.2016