RestoreRequest – redirect ne forward

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jiří Nápravník
Člen | 710
+
0
-

Mám formulář s přihlášením. Pokud se člověk přihlásí špatně, udělám storeRequest a předám si to jako parametr na jiný presenter. Jak se pak člověk přihlásí správně, tak udělám restoreRequest a dostane se uživatel kam potřebuje.

Problém je, že restoreRequest provádí FORWARD, či-li vypadá opravdu blbě adresa /ucet/prihlasit, pokud na clanku apod. A samozrejme na F5 se znovu odešle formulář, neobnoví článek. Je nějak možné udělat store/restoreRequest tak, aby se provedl redirect, nikoli FORWARD?

Casper
Člen | 253
+
+1
-

Řešilo se to například tady. Lze použít zmíněné řešení:

// BasePresenter
protected function startup()
{
    parent::startup();
    if ($this->request->hasFlag(\Nette\Application\Request::RESTORED)) {
        $this->redirect('this');
    }
}
Jiří Nápravník
Člen | 710
+
0
-

Samozřejmě jsem googlil, ale nenapadlo mě koukat na en forum. Díky za radu funguje. Škoda, že nemáme opravdu nějaký redirectToStoredRequest, protože pro většinou chci stejně redirect a POSTy řešit nepotřebuji

enumag
Člen | 2118
+
0
-

Ono je to poněkud složitější problematika, on se redirect totiž i po tom forwardu někdy provede, což je ovšem bug, ale nelze jej opravit kvůli kompatibilitě. Jestli chceš můžeš si přečíst mé RFC na toto téma. Metodu redirectToRequest jsem tam implementoval.

Editoval enumag (15. 7. 2015 21:01)

Jiří Nápravník
Člen | 710
+
0
-

JJ, taky jsem se tam pak proklepal a to redirectToRequest pouzil. diky vypada to fajn

enumag
Člen | 2118
+
+1
-

Jen to prosím ber jako experimentální. Já to sice v trochu jiné verzi používám i na produkci, ale jsem asi jediný. Použití na vlastní nebezpečí. ;-)