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.