Catch nefunkční FlashMessage, pouze throw

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

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
+
0
-

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
+
0
-

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)

CZechBoY
Člen | 3608
+
0
-

Neukončuješ náhodou životní cyklus v tom try?

Danny
Člen | 146
+
0
-

No je to to poslední co v té metodě mám, za ní už nic nepokračuje :) Mimo catch samozřejmě

Editoval Danny (28. 9. 2016 20:44)

Danny
Člen | 146
+
0
-

Vyřešeno, díky za reakce :)