Effacer la page lors d'une Exception

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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 ! :)

Édité par artragis

Staff

Cette réponse a aidé l'auteur du sujet

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.
}
+2 -0

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)

Édité par vibrice

+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é.

It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical? – Perlis

+0 -0

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é.

Édité par vibrice

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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