XI. Chapitre 11 : Gestion des erreurs▲
Un code sans erreurs c'est rare, des requêtes parfaites encore plus. Laravel affiche une page détaillée des erreurs rencontrées. Voilà par exemple ce qu'on obtient pour une page qui n'existe pas :
C'est évidemment bien pratique en phase de développement mais fortement déconseillé sur un site en production. Pourquoi ? Déjà ce n'est pas très esthétique pour l'utilisateur, et en plus ça peut guider une personne mal intentionnée pour pirater votre site. Regardez ce code dans le fichier app/config/app.php :
'
debug
'
=>
true,
Changez « true » pour « false », maintenant pour une page non trouvée on obtient seulement :
C'est plus concis et largement suffisant pour l'utilisateur (bon s'il est anglophone dans ce cas mais nous avons déjà vu comment arranger ça précédemment). Donc pensez bien à enlever ce mode « debug » lorsque votre site est en production ! Maintenant ouvrez le fichier app/start/global.php. Vous trouvez ce code :
Je rappelle que ce fichier est lu pour chaque requête reçue lorsque vous êtes dans un environnement « global » qui est l'environnement par défaut. Nous reparlerons de cela plus tard pour nous concentrer sur les erreurs. Nous avons celles qui sont propres à PHP et celles qui sont générées par les différents composants utilisés, comme le NotFoundHttpException que nous rencontrons pour une page qui n'existe pas. Le code présent dans le fichier app/start/global.php intercepte toutes les erreurs rencontrées et affiche une information sur cette erreur. C'est a priori largement suffisant, mais on peut aussi trier les erreurs par catégories et les intercepter. Par exemple, entrez cette route avec une belle erreur PHP :
Maintenant ajoutez ce code dans le fichier app/start/global.php :
Maintenant si vous utilisez l'URL http://localhost/laravel/public vous obtenez :
Une valeur inattendue est présente !
Vous avez donc le loisir de gérer les erreurs comme vous le voulez.
XI-A. Le fichier de « log »▲
Par défaut Laravel génère un fichier de « log » journalier dans le dossier app/storage/logs. Le nom des fichiers est de la forme log-année-mois-jour.txt, par exemple log-2013-01-22.txt. Que contient ce fichier ? Tout ce qu'on lui dit de mémoriser. Nous avons vu ci-dessus dans l'interception des erreurs la ligne :
Log::
error
($exception
);
Par défaut on mémorise donc toutes les erreurs rencontrées. Laravel utilise Monolog. On peut générer des enregistrements personnalisés, prenons le cas ci-dessus en changeant le code :
Si vous utilisez l'URL http://localhost/laravel/public vous obtenez maintenant le message d'erreur classique avec tous les détails. Pour voir si notre inscription a agi il faut ouvrir le fichier de log. Je trouve cette ligne :
[2013-01-22 12:52:16] log.ERROR: Je me suis encore trompé avec mes valeurs…
Je trouve aussi l'inscription de base :
[2013-01-22 12:52:16] log.ERROR: exception ‘UnexpectedValueException' with message ‘The Response content must be a string or object implementing __toString(), « boolean » given.' in…
Monolog respecte la norme PSR-3 qui définit l'interface de log. En particulier sont définis 8 niveaux : debug, info, notice, warning, error, critical, alert, emergency. Si vous voulez utiliser des fonctionnalités de Monolog vous pouvez récupérer facilement une référence. Par exemple le code suivant est l'équivalent du précédent :
XI-A-1. Les erreurs HTTP▲
Les erreurs HTTP peuvent être une page inconnue (404), un accès non autorisé (401), une syntaxe erronée (400)… Il est possible de générer une de ces erreurs avec cette syntaxe :
Maintenant si vous utilisez l'URL http://localhost/laravel/public vous obtenez :
Je rappelle aussi comment on intercepte une erreur 404 :