Hallo,
in meiner Contao 3 Erweiterung verwende ich eine Repository-Klasse, die bei der Erstellung einer Instanz eine CSV-Datei einliest und in ein array von Business-Objekten umwandelt, die man sich dann von der Repository-Instanz zurückgeben lassen kann. Die einzelnen Module arbeiten dann immer nur mit den zurückgegebenen Business-Objekten.
Derzeit erstelle ich bei jedem Seitenaufruf (bzw. in der compile()-methode meines Contentelements) das Repository-Objekt neu. Das würde ich nun gern ändern, so dass das Repository-Objekt nur einmal erzeugt (und somit die CSV-Datei nur einmal gelesen und verarbeitet) werden muss.
Mein erster Gedanke war, das Repository Objekt einfach in der Session zu speichern. In der compile()-Methode meiner Module bzw. ContentElemente sieht das dann so aus:
Das funktionert aber nicht, ich bekomme diese Fehlermeldung:PHP-Code:
if (!$this->Session->get('rep'))
{
$rep = new Repository($filename);
$this->Session->set('rep', $rep);
}
else
{
$rep = $this->Session->get('rep');
}
"The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Repository" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in ..."
Ok ich hab nun auch nachgelesen und denke, mir ist klar woran es liegt. Die Session wird offenbar deserialisiert, bevor meine Klassendefinition geladen wurde. Nun frage ich mich nur, wie ich das ändern kann. Meine Klasse Repository habe ich ja in der autoload.php im config-Ordner eingetragen, also lädt Contao sie. Aber wie kann ich beeinflussen, wann das passiert? Ist das überhaupt möglich, in Contao solche eigenen Objekte in der Session abzuspeichern? Wenn ich es richtig verstehe muss ich dazu ja irgendwie dafür sorgen, dass Contao die Klassendefinition einliest, bevor es das session_start() ausführt. Oder bin ich ganz auf dem falschen Dampfer?
Tschüss,
fluppi
Lesezeichen