Vlastní odbavení výjimek bez nette laďenky

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

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

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

enumag
Člen | 2118
+
+1
-

To vyhození 500 respektive laděnka jsou jen výchozí zpracování výjimek v Nette a dojde na ně pouze v případě že výjimku neodchytíš sám.

besir
Člen | 170
+
0
-

Předpoklad správný, ukaž tu část kde vyhodíš vyjímku a tu část kde ji odchytáváš…

ChocoTUx
Člen | 31
+
0
-

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

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.

filipsedivy
Člen | 37
+
+1
-

Odchytáváš špatně exception.

}catch(\Exception $e){
ChocoTUx
Člen | 31
+
0
-

Děkuji kluci,
na tohle bych asi nepřišel sám.

Roman