Catch nefunkční FlashMessage, pouze throw
- Danny
- Člen | 146
Zdravím,
mám klasickou situaci kde mám nějakou kritickou operaci v try a chytám
výjímku.
try
{
//...
}
catch (\Exception $e)
{
$form->getPresenter()->FlashMessage('Nastala chyba zkontrolujte údaje','danger');
//throw $e;
}
catch (GopayException $ex)
{
$form->getPresenter()->FlashMessage('Operaci se nepodařilo provést','danger');
//throw $ex;
}
Potřebuji zobrazit uživateli nějakou FlashMessage, ale pokud mi vyskočí první Exception a opakuji akci znova s opravenými údajemi tak se mi zobrazí prázdná FlashMessage, try se provede ale zůstane to ve stavu jako by vyskočila Exception.
Zajímavé je že pokud tam dám pouze
throw $e;
Tak vše funguje bez problém. Už si nevím rady nevíte kde by mohl být problém? Moc děkuji
Editoval Danny (28. 9. 2016 19:09)
- JZechy
- Člen | 161
Když vyhazuješ výjimku, dostaneš vždycky červenou obrazovku, pokud máš produkční mod, Error 500, bez ohledu na to, co vše před tím děláš.
A pokud je to ajaxem, objevíš v konzoli Error.
Pokud chceš uživateli zobrazit zprávu, že se něco nepovedlo je ideální v catchi se zachovat dle production mode, pokud je kod na provozu, výjimka se zaloguje a uživateli pošleš flash. Pokud je to na localhostu, kde bys měl být zaplý debug mode, vyhodí ti výjimku, abys věděl, kde ti vzniká chyba.
} catch(\Exception $e) {
if(\Tracy\Debugger::$productionMode) {
\Tracy\Debugger::log($e, \Tracy\Debugger::EXCEPTION);
$this->getPresenter()->flashMessage("...");
} else {
throw $e;
}
}
Editoval JZechy (28. 9. 2016 19:22)
- Danny
- Člen | 146
Díky za odpoveď ale zkoušel jsem to právě i s
$configurator->setDebugMode(false);
Abych si otestoval jak se to bude jevit uživateli a v obou případech to
vypadá úplně stejně. Pokud mám špatně údaje, vyhodí se mi klasicky
FlashMessage, poté opravím údaje aby byly validní a odešlu znova a zobrazí
se jen FlashMessage který je prázdný, try se provede ale zůstane to na formu
a tváří se jako by se nic nedělo.
A pokud naférovku vložim do výjimky pouze
throw $e;
tak ten poslední krok projde úplně bez problému, proto mi to vrtvá hlavou.
Editoval Danny (28. 9. 2016 19:49)