Salut à tous
Je rencontre un problème concernant la gestions des erreurs et des exceptions dans une structure MVC, et particulièrement au niveau des vues.
Pour résumer un peu la situation, et déjà voir si j'ai bien compris tout ça.
J'ai une classe "core", (donc général) qui contient entre autre ceci : (en simplifié)
Donc toutes les erreurs php sont considérées comme des exceptions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public function initConfigErrors() { set_exception_handler(array('Runfw', 'exceptionHandler')); set_error_handler(array('Runfw', 'errorHandler'), E_ALL | E_STRICT); } public static function errorHandler($code, $error, $file = NULL, $line = NULL, $trace = NULL) { if (error_reporting() & $code) { throw new ErrorException($error, $code, 0, $file, $line); } return TRUE; }
Puis si j'ai bien compris ceci, la méthode Runfw::exceptionHandler() est en quelque sorte le dernier recourt pour toutes exceptions qui ne seraient pas attrapées (catchées), en amont.
Au niveau des chargements des vue (classe View), je procède comme ceci :
Ce qui m'agace (un peu beaucoup), c'est que, si par exemple j'ai une variable non déclarée par exemple dans une vue, le code HTML généré n'est plus complet, le résultat visuel part en sucette, et ça arrive de ne pas percevoir l'erreur, à part regarder/éplucher dans le code générer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public static function capture($vue_filename, array $vue_data = NULL) { if (!empty($vue_data)) extract($vue_data, EXTR_SKIP); ob_start(); try { include($vue_filename); } catch (Exception $e) { Runfw_Exception::quick($e->getMessage(), $e->getCode(), $e->getFile(), $e->getLine(), $e->getTrace()); } // Retourne la capture de sortie et vide le buffer return ob_get_clean(); }
Pas franchement pratique coté débug.
Je me dis qu'il serait pas mal de ne pas renvoyer (echo) de suite l'erreur, mais pourquoi pas les stocker au fur et à mesure que les vues se chargent, et à la fin afficher les éventuelles erreurs.
Mais avec ce ob_start()/ob_get_clean() je ne vois pas trop comment faire ça, puis j'en sais rien si c'est vraiment pratique.
Comment feriez vous ça dans un contexte comme celui ci ?
Partager