Pozdrav ljudi, trebao bih malu pomoć, tj. objašnjenje oko PHP Exceptiona.
Znači, napravio sam abstraktnu klasu BaseException koja extenda Core PHP Exception klasu. Zatim sam napravio više vrsta Exception klasa tipa DatabaseException, FileException, ControllerException koje extendaju BaseException klasu.
Primjer 1: Spajam se na bazu, greška prilikom spajanja:
throw new DatabaseException("Error while trying to connect to database!");
Primjer 2: Problem s izvršavanjem nekog SQL querija
throw new DatabaseException("Error while trying to fetch data from database! Query: " . $query);
Primjer 3: Problem s učitavanjem fajla s diska
throw new FileException("Error while reading " . $file . " file from disc!");
E sad me zanima gdje handleati te Exceptione ? Radim neki svoj MVC koji radi na slijedeći način (init/bootstrap file):
// create new router
$router = $container->get('Router');
$router->import('Config/routes.php');
// run the router
$router->route();
// load controller
$dispatcher = $container->get('Dispatcher');
$dispatcher->load();
Zatim se tu loada controller i action, nakon toga se poziva repository layer (baza podataka) koji vraća podatke u controller koji zatim šalje te iste podatke na view.
Možda staviti try { (ovaj gore dio) } i onda ispod:
} catch (DatabaseException $e) {
echo "Database error!" . $e->getMessage();
$log->log('Database error', $e->getMessage());
$mail->sendMail("[email protected]", $e->getTitle(), $e->getMessage());
} catch (FileException $e) {
echo "File error!" . $e->getMessage();
$log->log('File error', $e->getMessage());
} catch (Exception $e) { // default
echo "Some exceptional error!" . $e->getMessage();
$log->log('Default exception', $e->getMessage());
}
Ili unutar svaki controller (gdje bude potrebno) staviti try catch blokove ?
Cilj je zapravo ispisati poruku korisniku da se dogodio neki Exception tipa “Stranica trenutno nije dostupna.” a u pozadini napraviti log u text file da se dogodila greška s bazom i slanje maila administratoru stranice.