Swiftmailer "Basi c Usage" приводит к Uncaught ArgumentCountError: слишком мало аргументов - PullRequest
0 голосов
/ 22 апреля 2020

Swiftmailer Вступление (2020-04-21) предоставляет такие инструкции, как:

$ composer require "swiftmailer/swiftmailer:^6.0"

Затем используйте Swiftmailer, например, так:

require_once '/path/to/vendor/autoload.php';

// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.example.org', 25));

Однако это приводит к ошибка, подобная следующей:

PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function Swift_Transport_EsmtpTransport::__construct(), 0 passed in /app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php on line 35 and at least 3 expected in /app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php:54

Система

PHP 7.3.10

Composer версия 1.9.1

Swiftmailer v6. 2,3

1 Ответ

0 голосов
/ 22 апреля 2020

Ошибка, похоже, связана с Composer, добавляющим свой автозагрузчик перед автозагрузчиком Swiftmailer. Swiftmailer делает ленивую загрузку своих классов, поскольку электронная почта обычно требуется только в нескольких областях сайта.

Когда загружено Swift_SmtpTransport, Composer загружает облегченный заполнитель для Swift (который посредством внедрения зависимостей) похоже, что он предоставляет класс для Swift_SmtpTransport), но загрузчик Swiftmail не получает возможности загрузить реальный класс для Swift_SmtpTransport.

Обходной путь - явно запустить автозагрузчик Swiftmail:

require_once '/path/to/vendor/autoload.php';
// a single autoload function call seems adequate
// (but this isn't well tested.)
Swift::autoload("Swift_SmtpTransport");


// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.example.org', 25)) 
// ... and so on
...