Pereiti prie turinio
← Visos PrestaShop 9 klaidos

PrestaShop 9 klaidos

Class "Swift_Message" not found PrestaShop 9 versijoje

PrestaShop 9 Swift Mailer pakeitė Symfony Mailer ir Swift klasių nebeturi. Moduliai, kurie laiškus kūrė su Swift_Message ar Swift_SmtpTransport, nustoja siųsti.

Klaida
Class "Swift_Message" not found
Pašalinta
PrestaShop 9.0
Dažniausiai randama
Naujienlaiškių, pranešimų ir SMTP moduliai

Kas nutiko

Iki 8 versijos PrestaShop laiškus siuntė per Swift Mailer biblioteką, o jos klasės buvo prieinamos kiekvienam moduliui. Kai kurie moduliai jas naudojo tiesiogiai: Swift_Message laiškui sukurti, Swift_SmtpTransport prisijungti prie pašto serverio, Swift_Attachment failui prisegti.

Swift Mailer nebeprižiūrimas, todėl PrestaShop 9.0 perėjo prie Symfony Mailer. Swift klasių nebėra, tad pirma jas naudojanti eilutė sustoja su Class "Swift_Message" not found (arba Swift_SmtpTransport, Swift_Mailer, Swift_Attachment).

Pavojinga tai, kad dažnai tai vyksta nematomai: cron užduotyje, po užsakymo, išsiuntus formą. Parduotuvė veikia, tik laiškai nebeišeina.

Sprendimas

Dažniausiai geriausia laiškų nebekurti rankomis ir naudoti PrestaShop Mail::send(). Jis naudoja parduotuvės pašto nustatymus, šablonus ir kalbas, veikia 1.7, 8 ir 9 versijose:

Mail::send(
    (int) $idLang,
    'my_template',               // modulio mails/{iso}/my_template.html ir .txt
    $this->trans('Your subject', [], 'Modules.Mymodule.Admin'),
    ['{firstname}' => $firstname],
    $toEmail,
    $toName,
    null, null,
    $fileAttachment,             // ['content' => ..., 'name' => ..., 'mime' => ...] arba null
    null,
    _PS_MODULE_DIR_ . 'mymodule/mails/'
);

Jei moduliui tikrai reikia savo siuntimo būdo (pavyzdžiui, atskiro SMTP serverio), pašto biblioteką jis turi atsinešti per Composer, o ne remtis ta, kurią anksčiau turėjo PrestaShop. Natūralus pasirinkimas – Symfony Mailer, nes jį naudoja ir PrestaShop 9.

Kur dar slepiasi

grep -rn "Swift_" modules/ override/

Patikrinkite ir Mail klasės override failus: juose nukopijuotos senojo, Swift pagrįsto kodo dalys, todėl jie lūžta taip pat. Po atnaujinimo išsiųskite tikrą bandomąjį laišką (užsakymo patvirtinimą, kontaktų formą, slaptažodžio atkūrimą), nes sugedęs pašto modulis klaidos niekam neparodo.

Raskite visas tokias vietas prieš atnaujindami

Kur yra vienas pašalintas kvietimas, paprastai yra ir daugiau. Mūsų nemokama PrestaShop 9 parengties patikra perskaito visų modulių, temos ir override failų kodą ir parodo kiekvieną problemą su failu ir eilute. Ji tik skaito, nieko nekeičia.

Gauti nemokamą patikrą

Nenorite taisyti patys? Parduotuves į PrestaShop 9 atnaujiname už fiksuotą kainą. Apie atnaujinimą