Vlastní odbavení výjimek bez nette laďenky
- ChocoTUx
- Člen | 31
Ahoj,
trochu jsem se vzhlédl ve výjimkách, které bych rád začal používat trochu častěji. Ale něco málo mi v nette nesedí.
**Předpoklad: ** Pokud jsem dobře pochopil, tak když někde v kodu vyhodim vyjimku, tak to ukončí danou funkci, cely try blok a jde to do catch bloku, kde se nějak zpracuje. Po zpracování by se mělo dál pokračovat v kódu za tím try-catch bloku?
Když to ale udělám v nette, tak on prostě vyhodí 500 (respektivě vyhodí laděnku) a nic dál.
Dotaz: Je nějaký způsob jak toto chování vypnout a prostě fungovat tak, že moje výjimky si zpracuji a pokračuji dál? Nebo mám někde myšlenkovou chybu v používání výjimek?
Našel jsem nastavení v configu, ale nějak na to nemá vliv…
application:
catchExceptions: False
Děkuji. Roman
- Unlink
- Člen | 298
A odchytávaš tie výnimky správne?
Pretože tvoj predpoklad je správny, pokiaľ v catch bloku odchytíš
výnimku, tak vykonávanie pokračuje po try / catch normálne ďalej.
Konštrukcia typu
try {
echo 1;
throw new Exception();
echo 2;
}
catch (Exception $ex) {
echo 3;
}
echo 4;
Vypíše očakávané 134
- ChocoTUx
- Člen | 31
je to jenom testovaci kravinka na ktere jsem si chtel overit jak to funguje.
ta ini() je funkce presenteru – tak jestli to na to nema vliv.
private function Tnt(){
throw new \Exception('spatna vec se stala');
}
public function ini()
{
\Tracy\Debugger::enable(\Tracy\Debugger::PRODUCTION);
parent::ini();
var_dump("pred");
try{
$this->tnt();
}catch(Exception $e){
\Tracy\Debugger::barDump($e->message);
}
var_dump("po");
}
A vystup je ze to vypise „pred“ a pak 500 (respektive v logu to vypise „Exception“ a jeji zpravu)
- jiri.pudil
- Nette Blogger | 1032
Pokud máš ten kód v nějakém namespacu, pak Exception
není
totéž co \Exception
. A PHP má tu nepříjemnou vlastnost, že
ti neřekne, když někde odchytáváš neexistující výjimku.