Maskování nebo zastavení signálu
- CZechBoY
- Člen | 3608
Zdravím,
lze nějak v Nette zamaskovat signál?
V BasePresenteru zkouším udělat jednoduchý autorizátor, ale narážím na
problém jak zastavit další průběh aplikace.
Když vyhodím BadRequestException tak mi Nette hodí bsod (nečekaně), ale
rád bych zobrazil pouze flashMessage.
Je to možné?
Díky za rady, tipy atp.
- David Kudera
- Člen | 455
BadRequestException je tak trochu ekvivalent pro 404, takže v produkčním režimu se místo tracy zobrazí nějaká tvoje pěkná stránka. Není to lepší, než zůstat na předchozí stránce a na ní jen zobrazit flash message?
- David Kudera
- Člen | 455
V tom případě tu exception nevyhazuj a vyměň ji za flash message. Btw počítáš s tím, že třeba vyhledávače si budou i o neexistující stránce myslet, že existuje, když vrátíš něco jiného než 404?
Edit: na netu je o tom spousta článků a textů. Tady je jeden příklad z nich
Editoval David Kudera (30. 7. 2014 13:35)
- David Kudera
- Člen | 455
Jo aha, tak u takových věcí se pak většinou jen jednoduše zavolá (u ajaxu s podmínkou a překreslením snippetu)
$this->redirect('this');
a přesměruje se, sice to může vypadat divně přes ajax, ale jde to.. druhá možnost je, že si překreslíš snippet s flash messages a přesměrovávat nebudeš.
Ale dost možná taky nechápu to „maskování“ signálu
Editoval David Kudera (30. 7. 2014 16:12)
- CZechBoY
- Člen | 3608
No myslel jsem, že to půjde nějak obecně a nebudu muset u každý metody kontrolovat jestli je povolená.
Nakonec jsem to udělal přes forward/odklonění střely :D
v BasePresenteru, metoda checkRequirements:
if ($this->user->loggedIn == false) {
$this->flashMessage('Pro tuto operaci musíte být přihlášen', 'info');
$this->forward('Error:blank');
}
Při akci Error:blank se nic neděje, šablona:
{block content}{/block}
Pozor! metoda checkRequirements se volá dřív než startup, takže pokud máte nějaký nastavování ve startupu tak je dobrý ji zavolat třeba na začátku checkRequirement (nebo ne?)
Editoval CZechBoY (30. 7. 2014 20:30)