Après quelques balbutiements en version 2.27, une première avancée dans la gestion et la reconnaissance plus fine des erreurs bloquantes de l'application est introduite en version 2.28. Avec l'ajout d'une classe spéciale au gestionnaire d'erreur PHP, la majorité des erreurs générées par la racine de l'application ou de son cœur est désormais interceptée par des classes d'exception renvoyant un code et un message unique. Tous ces codes et messages sont regroupés dans un énumérateur. Les exceptions sont si possible traitées suivant différents paramètres (mode debug, mode CLI...) puis renvoyées à l'utilisateur.
![exception.png, oct. 2023 exception.png, oct. 2023](/public/2.28/.exception_m.png)
Liste d'erreurs :
susceptible de changer dans les versions à venir
- 503 : AppException : Site temporarily unavailable
- 400 : BadRequestException : Bad Request
- 570 : BlogException : Blog handling error
- 551 : ConfigException : Application configuration error
- 409 : ConflictException : Conflict
- 553 : ContextException : Application context error
- 560 : DatabaseException : Database connection error
- 404 : NotFoundException : Not Found
- 412 : PreconditionException : Precondition Failed
- 552 : ProcessException : Application process error
- 561 : SessionException : Session handling error
- 571 : TemplateException : Template handling error
- 401 : UnauthorizedException : Unauthorized
- 500 : InternalServerException : Internal Server Error
Deux grandes catégories sont présentes avec :
- 4xx : Erreur client
- 5xx : Erreur serveur
Traitement
Les exceptions et erreurs interceptées par l'application sont alors envoyées à la classe Fault pour traitement et affichage à l'utilisateur. Il est possible d'intervenir avant l'affichage en définissant dans la constante DC_ERRORFILE un fichier à appeler, ce fichier php aura accès à toute la classe Fault.
Si la plateforme à déjà déclaré un gestionnaire d'exception à PHP, il sera alors utilisé.
Incompatibilité
Les méthodes de la classe Fault introduites en version 2.27 sont déjà obsolètes et tout simplement supprimées.
Le contenu de ce document a été écrit suivant le code de la version 2.28 de Dotclear.
La discussion continue ailleurs
URL de rétrolien : https://dotclear.watch/trackback/443