PrestaShop 9 klaidos
Class "GuzzleHttp\Client" not found PrestaShop 9 versijoje
PrestaShop 9 nebeturi Guzzle HTTP bibliotekos. Moduliai, kurie su GuzzleHttp\Client kviečia išorines sistemas (mokėjimų, siuntimo, prekių srautų, ERP), sustoja, jei neturi savos kopijos.
- Klaida
Class "GuzzleHttp\Client" not found- Pašalinta
- PrestaShop 9.0
- Dažniausiai randama
- Mokėjimų, siuntimo, prekyviečių ir ERP moduliai
Kas nutiko
Iki 8 versijos PrestaShop savo HTTP užklausoms turėjo Guzzle biblioteką, ir daug modulių ja naudojosi patys jos neįtraukę: new GuzzleHttp\Client() tiesiog veikė. PrestaShop 9.0 Guzzle iš branduolio pašalino.
Modulis, kuris rėmėsi branduolio kopija, dabar sustoja ties pirma užklausa su Class "GuzzleHttp\Client" not found. Dažniausiai tai moduliai, bendraujantys su išorine paslauga: mokėjimų sistemos, kurjerių kainos ir etiketės, prekių srautai, prekyvietės, ERP ar apskaitos sinchronizacija.
Todėl ši klaida brangi. Parduotuvė atrodo normaliai, bet iš apmokėjimo dingsta pristatymo būdai, nepavyksta mokėjimai ar nustoja sinchronizuotis likučiai.
Sprendimas
Modulis turi turėti savo HTTP klientą:
- Įtraukti Guzzle į modulį. Pridėti jį į modulio
composer.jsonir pateikti kartu moduliovendor/aplanką. Moduliai, kurie taip jau darė, veikia toliau. - Arba naudoti Symfony HttpClient, kurį PrestaShop 9 turi, jei modulis skirtas tik PrestaShop 9.
- Arba ieškoti atnaujinimo. Mokėjimų ir siuntimo paslaugų teikėjai paprastai išleidžia PrestaShop 9 versiją – tai saugiau nei taisyti jų kodą.
// Kai Guzzle yra paties modulio vendor aplanke
require_once __DIR__ . '/vendor/autoload.php';
$client = new GuzzleHttp\Client(['timeout' => 10]);
Kai du moduliai turi skirtingas Guzzle versijas, laimi pirmas įkeltas, o kitame gali atsirasti keistų klaidų. Gerai padaryti moduliai savo priklausomybes pervadina (pavyzdžiui, su PHP-Scoper), kad to išvengtų.
Kur dar slepiasi
grep -rln "GuzzleHttp" modules/ override/ | grep -v "/vendor/"
Failai paties modulio vendor/ aplanke tvarkoje. Tikrinti reikia modulio failus, kurie naudoja Guzzle, kai modulis neturi savo vendor/guzzlehttp.