restoreRequest?
- Martin Mates
- Člen | 179
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
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
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
Zkusil jsem dát ten redirect pryč a funguje to jak má. To jsou věci! Díky moc Romane!
- romansklenar
- Člen | 655
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 restoreRequest
ovat :)
EDIT: Pozdě :) PS: ta vyjímka se teda opravdu vyhazuje.
Editoval romansklenar (30. 11. 2008 22:37)