La classe d'erreur

Billet

Dotclear version 2.27 introduit une classe d'erreur nommée Fault en remplacement de la fonction __error() et du fichier error.php.

La classe Dotclear\Fault n'est pas à proprement parler un gestionnaire d'erreur, elle ne se substitue pas aux Exception et Error. Elle va simplement permettre à l'application d'uniformiser son comportement sur certains défauts (erreurs) connus. Normalement seules la classe Dotclear\App et les classes Dotclear\Core\Xxx\Utility l'utilisent. Elle est utilisée lors de défauts ne permettant pas de continuer la bonne exécution du script.

Constantes

La classe définit des constantes de niveau d'erreur, ces niveaux seront reportés en code de réponse HTTP le cas échéant, et sont toutes de niveau supérieur à 500 (Internal server error).

  • 550 : UNDEFINED_ISSUE : Uncoded or undefined error (before as 0)
  • 555 : SETUP_ISSUE : Server configuration issue (before as 0)
  • 560 : CONFIG_ISSUE : Dotclear configuration file issue (before as 10)
  • 565 : DATABASE_ISSUE :Database connexion issue (before as 20)
  • 570 : BLOG_ISSUE : Blog definition issue (before as 30)
  • 575 : TEMPLATE_CREATION_ISSUE : Template file creation issue (before as 40)
  • 580 : THEME_ISSUE : Theme issue (before as 50)
  • 585 : TEMPLATE_PROCESSING_ISSUE : Template processing issue (before as 60)
  • 590 : BLOG_OFFLINE : Blog is offline (before as 70)
Lancement

Il y a deux façons lancer un défaut, par la création d'une instance en passant en arguments le titre, le message et le niveau, ou de manière statique en passant en arguments le titre et l'exception.

<?php
use Dotclear\Fault;

// Dynamique
if (!defined('DC_CONTEXT_ADMIN')) {
    new Fault('Server error', 'Site temporarily unavailable', Fault::SETUP_ISSUE);
}
// Statique
try {
    if ($a < 1) {
        throw new Exception('a est inferieur à 1', Fault::CONFIG_ISSUE);
    }
    if ($a > 10) {
        throw new Exception('a est supérieur à 10', Fault::CONFIG_ISSUE);
    }
 } catch (Exception $e) {
    Fault::throw('Mauvaise valeur de a', $e);
 }
Retour

La classe permet plusieurs façons de reporter le défaut.

  • Si le script est exécuté en mode CLI (ligne de commande) comme pour une mise à jour depuis une console, la classe répondra par un simple message dans la console.
  • Si le script est exécuté normalement, une page web indiquant le niveau d'erreur, son titre et un message explicatif sera retourné avec en code de réponse HTTP le niveau d'erreur.
  • Si au moment du lancement de la classe la constante DC_DEBUG est déjà définie et est à true, l'erreur php sera retournée, comme si la classe n'existait pas.
Personnalisation

Il est possible de personnaliser la page web de défaut. Pour cela il faut renseigner la constante DC_ERRORFILE en la définissant avec le chemin complet vers un fichier qui sera inclu dans la méthode retournant le défaut. Ce fichier devra rendre à la sortie standard de PHP (echo) du code HTML complet et valide. Les variables $summary, $message et $code lui sont accessibles.

class_fault_http.png, juil. 2023
Reponse HTML de la classe Fault



Le contenu de ce document a été écrit suivant le code de la version 2.27 de Dotclear.

La discussion continue ailleurs

URL de rétrolien : https://dotclear.watch/trackback/17