Problem mit OXID-Warenkorb-Modulen und dem WBL_Autoloader gefixt

Es gibt bei OXID zwei mögliche Arten eine Klasse samt deren Module zu laden: Direkt über oxNew() oder über den Autoloader wenn man z.B. Klassenkonstanten aufruft oder “Modul-Erstellungstricks” anwendet. Also beispielsweise

  • einen neuen Backend-View anlegen
  • diesen View von *_parent erben lassen – obwohl der Backend-View kein Modul sondern eine Ursprungsklasse ist …
  • dafür dann in der Moduleinstellung aber z.B. oxadminview für diesen neuen View angeben

= und OXID einfach dynamisch den neuen Backend-View von oxAdminView erben lassen.

Und ein weiteres Beispiel sollte nicht unerwähnt bleiben, nämlich das Laden von Objekten, die (in der Session) serialisiert wurden, welches beim Autoloader Probleme macht.Ist der Quellcode vor dem jeweiligen session_start– oder unserialize – Aufruf noch nicht vorhanden, so wird PHP eine Instanz von Typ __PHP_Incomplete_Class erzeugen. Genau dieser Umstand in leicht abgewandelter Form tritt auf manchen Systemen mit meinem Autoloader auf.

Die Session-Klasse versucht in oxSession::getBasket() aktuell das Warenkorb zuerst über den Autoloader zu laden:

Habt Ihr jetzt über meinen Autoloader ein Warenkorb-Objekt in der Session serialisiert, blubbert dieser Aufruf zuerst in den WBL_Autoloader. Der Autoloader reicht den Versuch die *_parent-Klasse zu laden dann an den OXID-Autoloader oxAutoload weiter. Dieser versucht dann die gesamte Modulchain aufzubauen, aber das kann er ohne den WBL_Autoloader leider nicht:

Der hier markierte class_exists-Aufruf ist abhängig vom WBL_Autoloader und blubbert leider auf manchen System nicht wieder zu ihm hoch, denn dies ist ein verschachtelter Aufruf. Das entsprechende Warenkorb-Objekt gilt ab dem Moment als deaktiv und wird nicht mehr vom System genutzt.

Daher musste leider ein weiterer Core-Fix hinzu, der nichts weiter macht, als über oxNew() die Logik kontrolliert zu laden. Der Fix ist auf Github entsprechend eingecheckt.

Sry für dieses Problem. Es ist einfach ein Seiteneffekt, der kaum auffällt und bei üblichen Modularbeiten nicht auftritt.

 

 

0.00 avg. rating (0% score) - 0 votes
0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *