tlačítko odhlásit – koncepce?
- FOUS
- Člen | 15
Ještě jednu prosbu, jak udělat tlačítko odhlásit?
Je to asi koncepční záležitost, ale v OOP jsem neplavec.
A v Nette panic.
V HomepagePresenteru mám přihlašovací formulář (vytvořený
továrničkou) vč. jeho zpracování.
function authenticate() mám v BaseModelu, v HomepagePresenteru jen provedu po
vypjnění a odeslání formuláře:
<?php
public function userAuthSubmitted(Form $form) {
$user = Environment::getUser ();
$user->setAuthenticationHandler ( new BaseModel ( ) );
$values = $form->getValues ();
try {
// Zpracování
$user->authenticate ( $values ['username'], $values ['password'] );
$this->flashMessage ( 'Vaše přihlášení proběhlo úspěšně.', 'success' );
$this->redirect ( 'HomePage:default' );
} catch ( Exception $e ) {
$form->addError ( $e->getMessage () );
}
}
?>
To funguje, akorát mi to do formuláře (na místo kam se zapisují vyjímky z AuthenticationException při špatném vypjnění hesla atd…) na závěr (po úspěšném přihlášení) vypíše http://xxx.xxx.cz/?…
Takže to asi nejede úplně korektně.
Ze všech stránek bych potřeboval udělat odhlášení a návrat do
HomepagePresenteru.
Teď to mám v globální šabloně takto:
<a href=„{link Homepage:actionLogout}“>Odhlásit</a>
V HomepagePresenteru takto:
<?php
public function actionLogout() {
Environment::getUser ()->signOut ();
$this->flashMessage ( 'Právě jste se odhlásil/a.', 'failure' );
$this->redirect ( 'HomePage:default' );
}
?>
a po kliknutí na odkaz v adresním řádku adresu ve tvaru: http://xxx.xxx.cz/?…
nastane toto:
BadRequestException #404
Page not found. Missing template ‚…/Homepage/actionLogout.phtml‘.
v bootstrapu mám:
$router[] = new SimpleRouter(‚Homepage:default‘);
Jak to udělat, co dát do hlavní šablony, toť má otázka.
- jasir
- Člen | 746
Asi bys tam měl mít:
<a href="{link Homepage:logout}">Odhlásit</a>
U toho prvního problému – neměl by jsi chytat Exception
,
ale pouze AuthenticationException
. Volání redirect
(nebo forward()
) totiž také vyhazuje vyjímku typu
RedirectException
(ForwardingException
), kterou ty
chytneš a vrazíš do formu ;-)
Editoval jasir (22. 7. 2009 16:34)
- Ondřej Mirtes
- Člen | 1536
Já ho dávám jako signál v BasePresenteru, uživatele v něm odhlásím,
přidám flashMessage a zavolám pak
$this->redirect('this')
.
- ic
- Člen | 430
Jen mě napadlo že by šla udělat jedna defaultní flashMessage, která by se zobrazila v případě že je určitá předchozí stránka a žádná fid.
V tom připadě by se ve kontejneru na flashMessage zobrazila nějaká defaultní hláška, podle právě předchozí stránky, třeba ‚přihlášení proběhlo úspěšně‘ a fid by se předávala jen v případě jiného stavu například nějaké chyby.
Takhle by to snad šlo realizovat ne?