Endlosschleife durch registerAction()

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Endlosschleife durch registerAction()

Beitrag von dave » 25.03.2011, 23:11:17

Guten Abend ;)


Aktuell hänge ich unter anderem an einem unschönen Problem:

Ich lade meine Userdaten aus der Session und transformiere die mit einem setDataComponent, sodass ich das nicht überall "vor Ort" (in den Controllern) machen muss. Dies mache ich in einer registerActionSession.php, welche ich in der Bootstrap über ein

Code: Alles auswählen

$fC->registerAction('portal::actionconfig','GenericDomainObject'); 
und die Config lade. Das klappt auch!

Mein Problem: Meine registerActionSession.php sieht vereinfacht so aus:

Code: Alles auswählen

class registerActionSession extends AbstractFrontcontrollerAction {

    public function registerActionSession() {

    }

    public function run() {

        $ormf = &$this->__getServiceObject('modules::genericormapper::data', 'GenericORMapperFactory');
        $orm = &$ormf->getGenericORMapper('modules::usermanagement', 'umgt', 'database-1');

        $sessMgr = new SessionManager('UserData');
        $user = $sessMgr->loadSessionData('user');

        if ($user !== null) {
            $user->setDataComponent($orm);
        }
        
        $sessMgr->saveSessionData('user', $user);
    }

}
 
Soweit, alles schön. Wenn ich nun durch die Browser-Historie nicht die Haupt-Url sondern irgendwas aus der Navigation lade, bricht das Laden mit einem Fehler von PHP ab, weil die Session-Daten nicht existieren.
Nun möchte ich, wenn die Session bzw. $user === null ist, einfach auf die Haupt-URL leiten. Wenn ich meine IF-Anweisung entsprechend mit der Erweitrerung versehe, lande ich in einer Endlosschleife. Soweit ist das auch völlig verständlich für mich, auch die Endlosschleife, weil die Action ja immer und immer wieder durch den Aufruf der Haupt-URL aufgerufen wird.

Wie kann ich das nun aber umgehen? Ich könnte einen Text mit Link ausspucken und durch ein exit(0) die weitere Ausführung beenden, aber das wäre echt ein bisschen doof ;).

Ich brauche das auch erstmal nur vorrübergehend, damit die ersten Tester nicht total verunsichert sind. Später wird an der Stelle der Cookie-Check zum automatischen Einloggen greifen ...

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Endlosschleife durch registerAction()

Beitrag von Screeze » 25.03.2011, 23:17:29

du könntest vor dem redirect einfach prüfen ob die aktuelle url bereits die hauptseite ist, oder hab ich dich falach verstanden?

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Endlosschleife durch registerAction()

Beitrag von dave » 26.03.2011, 07:55:38

Na klar, das könnte ich auch machen!! Und wieso bin ich nun nicht selbst darauf gekommen? :oops: Danke Ralf für den Denkanstoss!

Folgendermassen hab ich es gelöst (Für die Nachwelt, falls es auch mal haken sollte ;)):

Code: Alles auswählen

class registerActionSession extends AbstractFrontcontrollerAction {

    public function registerActionSession() {

    }

    public function run() {



        $ormf = &$this->__getServiceObject('modules::genericormapper::data', 'GenericORMapperFactory');
        $orm = &$ormf->getGenericORMapper('modules::usermanagement', 'umgt', 'database-1');

        $sessMgr = new SessionManager('UserData');
        $user = $sessMgr->loadSessionData('user');

        if ($user !== null) {
            $user->setDataComponent($orm);
        } else {
            if ($_SERVER['REQUEST_URI'] != '/') {
                $link = LinkHandler::generateLink('./', array('view' => ''));
                HeaderManager::forward($link);
            }
        }

        $sessMgr->saveSessionData('user', $user);
    }

}
 

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast