Ergebnis 1 bis 4 von 4

Thema: Objekt in Session speichern

  1. #1
    Contao-Nutzer
    Registriert seit
    23.06.2012.
    Beiträge
    72

    Standard Objekt in Session speichern

    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:

    PHP-Code:
            if (!$this->Session->get('rep'))
            {
                
    $rep = new Repository($filename);
                
    $this->Session->set('rep'$rep);
            }
            else
            {
                
    $rep $this->Session->get('rep');
            } 
    Das funktionert aber nicht, ich bekomme diese Fehlermeldung:
    "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

  2. #2
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das geht leider nicht, das hab ich auch schon festgestellt. In der system/initialize.php kommt das create_session bevor die autoload.php verarbeitet wurde.

    Vielleicht kannst du die Daten des Objekts manuell in der Session ablegen und wieder holen?
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  3. #3
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Hallo fluppi
    Code:
            if (!$_SESSION['rep']) 
            { 
                $rep = new Repository($filename); 
                $_SESSION['rep'] = serialize($rep); 
            } 
            else 
            { 
                $rep =  unserialize($_SESSION['rep']); 
            }
    Sollte doch gehen oder nicht?
    Lg Marko
    Geändert von markocupic (31.03.2013 um 21:58 Uhr)
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  4. #4
    Contao-Nutzer
    Registriert seit
    23.06.2012.
    Beiträge
    72

    Standard

    Danke für die Tipps, so funktioniert es tatsächlich einwandfrei.

    Übers Wochenende hatte ich mir schon überlegt, meine Business-Objekte zu entsorgen und stattdessen einfach alles in einem Array zu speichern, das ich dann einfach in der Session speichern könnte. Wäre vielleicht auch etwas mehr der PHP-Style. Vielleicht auch performanter, da ich mir ja das serialisieren/deserialisieren sparen würde.

    Aber nun kann ich doch erstmal mit meinem Rep und meinen BOs weitermachen

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •