restoreRequest?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Martin Mates
Člen | 179
+
0
-

Chci se zeptat, k čemu slouží při přihlašování tento řádek:

<?php
$this->getApplication()->restoreRequest($this->backlink);
?>

Je v metodě, která se volá po odeslání formuláře.

<?php
    public function loginFormSubmitted($form)
    {
        try {
            require_once APP_DIR . '/models/Auth.php';
            $user = Environment::getUser();
            $user->authenticate($form['username']->getValue(), $form['password']->getValue());
            $this->getApplication()->restoreRequest($this->backlink);
            $this->redirect('Main:');

        } catch (AuthenticationException $e) {
            $form->addError('Špatné jméno nebo heslo.');
        }
    }
?>

Našel jsem si v dokumentaci tu funkci, ale stejně z toho moc moudrý nejsem. Minimálně nevím, co přesně je v session Nette.Application.Request. Zkoušel jsem řádek vymazat a vypadá to, že se nic nezměnilo. Chci se zeptat, k čemu je to dobré. Není to náhodou k tomu, když aktualizuji stránku, že se znovu neprovede request přihlášení? Díky moc.

romansklenar
Člen | 655
+
0
-

Metody storeRequest a restoreRequest slouží ke zpětnému přesměrování na stránku a obnovování původních požadavků.

Příklad: stránka potřebuje autentizaci, přesměruje tě na přihlašovací formulář a po úspěšném přihlášení tě vrátí na původní stránku.

Při storeRequest se uloží serializovaný objekt PresenterRequest do session (zkus si dumpnout $_SESSION) pod klíčem, který je funkcí vrácen. Poté vykonáš přihlášení a objekt se unserializuje (voláním restoreRequest) a je předán presenteru jako nový požadavek (což se projeví jako přesměrování na původní stránku)

Martin Mates
Člen | 179
+
0
-

Ahaaaa, šikovná věc. Ale stejně je pod tím redirect. Neznamená to teda, že mě to po přihlášení vždy přesměruje na Main: ?

Martin Mates
Člen | 179
+
0
-

Zkusil jsem dát ten redirect pryč a funguje to jak má. To jsou věci! Díky moc Romane!

romansklenar
Člen | 655
+
0
-

Pokud mě paměť neklame (doufám že na tom ještě není tak zle) tak ne, to přesměrování neproběhne a při vykonávání restoreRequest se vyhodí ForwardingException, kterou aplikace odchytí a správně přesměruje na nový pořadavek. Ten redirect je tam myslím jen proto, kdyby nebylo co restoreRequestovat :)

EDIT: Pozdě :) PS: ta vyjímka se teda opravdu vyhazuje.

Editoval romansklenar (30. 11. 2008 22:37)