Effacer la page lors d'une Exception

Le problème exposé dans ce sujet a été résolu.

Bonjour ! :)

Je suis en train de créer un petit framework PHP, mais je rencontre un problème. Lorsque je lève une exception, j'ai une partie de ma page HTML qui s'affiche (celle juste avant que l'exception soit levée).

J'aimerais que toute la page s'efface, pour y mettre à la place l'exception, mais je ne trouve pas comment faire.

Y-a-t'il une fonction PHP qui permet de faire cela ?

Merci ! :)

+0 -0

Une technique sympa à utiliser est la tamporisation du flux de sortie avec ob_start(); en début de page.

à partir de là il suffit de faire

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
ob_start(); //début de page
/*
tout ton code sympa
*/
try{
    quelque_chose_qui_throw_une_exception();
}catch(Exception $e){
    ob_clean(); // nettoie la page
    // afficher la page d'erreur
}finally{
    ob_end_flush(); //affiche la bonne page : si pas d'erreur tout est cool, sinon seulement la page d'erreur.
}

Il n'y a même pas nécessairement besoin d'être "aussi" explicite :

  • ob_start est (déjà) réalisé par PHP s'il y un output_buffering (le ob_end_flush ou équivalent dans tous les cas sera implicitement réalisé par PHP il me semble)
  • on pourrait également se passer de try/catch(/finally) en gérant ça par set_exception_handler (au détail près que ça met fin au script dans le même temps)
+0 -0
  • on pourrait également se passer de try/catch(/finally) en gérant ça par set_exception_handler (au détail près que ça met fin au script dans le même temps)

vibrice

Je pense que un try/catch est plus pratique à utiliser : si on remonte dans le code, on voit où l'exception est gérée, alors qu'avec l'autoloading PHP, un set_exception_handler peut être appelé plusieurs fois et à différents endroit. Ce n'est pas global, on peut protéger une seul partie du code (pratique pour un framework, ou on veut par exemple gérer de deux façons différentes une erreur du framework et une erreur du contrôleur, par exemple. On peut adapter le comportement à la partie englobé.

J'ai bien dit "pourrait" : à chacun de voir ce qui est préférable sans sa situation.

Cependant, j'avais perdu de vue qu'il était question d'un framework, où un try/catch trouverait parfaitement sa place. Sans, un set_exception_handler, pour faire office de cas par défaut, m'aurait paru bien plus adapté.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte