Redirect z jedoho conrtoleru na druhý

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

Začínám s Nette na jednom projektu a mám problém s redirectem z jednoho presenteru na jíný. Je to v části přihlašování do systému, kde když proběhne ověření uživatele, chci přesměrovat na jiný preseneter, než ten co obsluhuje formulář. Nicméně místo přesměrování se mi vypíše nad formulářem url, kam by to přesměrovalo. Co s tím?

	try{
    $user->authenticate($values['user'], $values['password']);
    $this->redirect('Interface:default'); //přesměrování na požadovaný presenter
}
catch(Exception $e){
    $this->errorMessage = $e->getMessage();
}
Jod
Člen | 701
+
0
-

Na tvojom mieste by som sa pozrel do akrabat.forms. Ale inak, miesto Exception použi AuthenticationException :)

Prečo? Metóda, redirectUri, ktorú volá tvoja metóda redirect vyvoláva RedirectingException, ktorú ty odchytávaš.

Editoval Jod (27. 2. 2009 15:24)

smarma
Člen | 5
+
0
-

S tou výjimkou máš pravdu. Děkuji. Kupodivu, jakmile jsem změnil tu výjimkou , tak to funguje. Nechápu sice dost dobře proč (protože když ji to nevyhodilo, jak může vadit že ji chytám na nesprávném místě?) ale hlavně že to běží. Ještě jednou moc děkuji.

_Martin_
Generous Backer | 679
+
0
-

Protože metoda $this->redirect(...) vyvolá VŽDY výjimku RedirectingException. A protože tvůj kód zachytával VŠECHNY výjimky, zachytil i „přesměrovávací“ výjimku, která se jindy bez problémů prokouše až do metody Application->run(), kde je potom provedeno přesměrování. Změnou kódu jsi nastavil, aby tvůj blok try-catch zachytával jen výjimku AuthenticationException, ostatní (včetně té přesměrovávací) nechá proplout do vyšších míst.