Jak co nejlépe psát výjimky
- darthcz
- Člen | 113
Dobrý den,
chtěl bych vás poprosit o pomoc s psaním výjimek. Respektive kam je vhodné je psát a kde je vhodné je zachytávat.
Mám například tuto funkci:
public function insertRow($table, $data = array()){
if (empty($table))
throw new LogicException('Nebyla zadána tabulka pro db!');
try{
return dibi::query('INSERT INTO ['.$table.']', (array) $data);
}
catch (DibiException $exception) {
if (preg_match('/Duplicate entry/',$exception->getMessage()))
return array('-1' => 'Záznam již existuje!');
else
echo $exception->getMessage();
}
}
je uložena v baseModelu, Blok try je na volání dibi::query – předpokládám, že by mohla skončit chybou a vyvolat výjimku, kterou následně zachytím. Pokud ale mám prázdnou tabulku, vyhazuji logickou výjimku. Kde se tato výjimka zachytává? V errorPresenteru? Nebo ji lze zachytávat i jinde? Popřípadě jak se toto řeší?
Za odpověď děkuji.
- Mikulas Dite
- Člen | 756
Tohle téma zpracovával Jakub Vrána na svém blogu.
Osobně bych výjimku ošetřil v jiném modelu, který volá tuto metodu
insertRow()
. Například funkce registerUser()
by
použila insertRow()
a pokud by ta vrátila chybu, uložil bych to
do logu a uživatele informoval třeba pomocí flash message (pád aplikace ani
error presenter nejsou v tomto příkladu vhodnější). Analogicky jdou
zpracovat podobné scénáře, ale určitě jsou i jiné situace, kde odlišný
postup bude lepší.
V tomto případě je výjimka spíš InvalidArgument
nebo
podobná, ale to je vedlejší.
Editoval Mikulas Dite (4. 11. 2010 19:29)