PrestaShop 9 klaidos
Call to undefined method Attribute::getAttributes() PrestaShop 8 ir 9 versijose
PrestaShop 8 pervadino Attribute klasę į ProductAttribute, nes PHP 8 turi savo Attribute klasę. Senas kodas, kviečiantis Attribute::, dabar pasiekia PHP klasę ir sustoja.
- Klaida
Call to undefined method Attribute::getAttributes()- Pašalinta
- PrestaShop 8.0
- Dažniausiai randama
- Moduliai, dirbantys su kombinacijomis, override failai
Kas nutiko
PrestaShop 1.7 prekių atributų reikšmes (dydis M, spalva Raudona) tvarkė klasė Attribute. PHP 8 pridėjo integruotą klasę tuo pačiu vardu, skirtą PHP atributams, tokiems kaip #[Route]. Dvi klasės su tuo pačiu vardu negali egzistuoti kartu, todėl PrestaShop 8.0 savo klasę pervadino į ProductAttribute.
Senas kodas nesustoja su „class not found“. Attribute vis dar yra, tik dabar tai PHP klasė. Todėl klaida atsiranda pirmą kartą iškvietus metodą:
Attribute::getAttributes($idLang)duoda Call to undefined method Attribute::getAttributes()new Attribute($id)sukuria PHP atributo objektą, o kodas sustoja kiek vėliau, kai skaito->namear kviečia->save()
Dėl to klaida klaidina: klasės vardas atrodo teisingas, bet niekas joje neveikia.
Sprendimas
Naudokite naują klasės vardą. Metodai ir savybės tie patys:
// Buvo (PrestaShop 1.7)
$values = Attribute::getAttributes($idLang);
$value = new Attribute($idAttribute, $idLang);
// Dabar (PrestaShop 8 ir 9)
$values = ProductAttribute::getAttributes($idLang);
$value = new ProductAttribute($idAttribute, $idLang);
Override failas override/classes/Attribute.php turi tapti override/classes/ProductAttribute.php su class ProductAttribute extends ProductAttributeCore. Po to ištrinkite var/cache/prod/class_index.php, kad PrestaShop jį rastų.
AttributeGroup vardas nepasikeitė.
Kur dar slepiasi
Kombinacijų, prekių pasirinkimų, filtrų, prekių srautų ir importo moduliuose. Ieškokite klasės, naudojamos kode, o ne tik žodžio:
grep -rn "Attribute::\|new Attribute(\|extends AttributeCore" modules/ override/