Dans le tutoriel d'aujourd'hui, je présenterai la gestion des erreurs et des exceptions de Yii et vous expliquerai quelques scénarios d'introduction..
Vous vous demandez ce que Yii est? Découvrez notre introduction au framework Yii et à la programmation avec Yii2.
Les erreurs sont des défauts inattendus de notre code, souvent découverts en premier par les utilisateurs. Ils vont généralement interrompre l'exécution du programme. Il est important non seulement de rompre avec élégance pour l'utilisateur, mais d'informer le développeur du problème afin qu'il puisse être résolu.
Des exceptions sont créées par le développeur lorsqu'une condition d'erreur potentiellement prévisible se produit. Dans le code où une exception peut se produire, le développeur peut déclencher () une exception à un gestionnaire d'erreurs robuste.
Dans Yii, les erreurs PHP non fatales (avertissements et notifications, par exemple) sont acheminées vers des exceptions pouvant être capturées, ce qui vous permet de décider de la façon dont vous devez y réagir et y répondre. Vous pouvez désigner une action de contrôleur pour traiter toutes ces exceptions. Et vous pouvez personnaliser le format d'affichage pour les erreurs, par exemple. HTML, JSON, XML, etc.
Les exceptions et les erreurs PHP fatales ne peuvent être évaluées qu'en mode débogage. Dans ces types de scénarios de développement, Yii peut afficher des informations détaillées sur la pile d'appels et des segments de code source. (vous pouvez le voir ci-dessus dans l'image du titre).
Les erreurs fatales sont le type d'événements qui interrompent l'exécution de l'application. Cela inclut le manque de mémoire, l'instanciation d'un objet d'une classe qui n'existe pas ou l'appel d'une fonction qui n'existe pas.
Par exemple:
$ t = new Unknownobject ();
Commençons par quelques exemples de traitement des erreurs et des exceptions.
Premièrement, nous configurons notre application dans frontend / config / main.php. ErrorHandler est défini en tant que composant, comme indiqué ci-dessous. Cet exemple provient de l'application de démarrage de ma série, Meeting Planner. Remarquez le errorHandler
configuration en Composants
:
'mp-frontend', 'name' => 'Meeting Planner', 'basePath' => dirname (__ DIR__), 'bootstrap' => ['log', '\ common \ components \ SiteHelper'], 'controllerNamespace' = > 'frontend \ controllers', 'catchAll' => [], 'composants' => ['assetManager' => […],… 'errorHandler' => ['errorAction' => 'site / error', 'maxSourceLines '=> 20,],…],];
Dans l'exemple ci-dessus, errorAction
dirige l'utilisateur vers l'action d'erreur de mon SiteController.
Plus largement, Yii offre une variété d’options de configuration pour errorHandler
pour la redirection et la collecte de données:
Propriété | Type | La description |
---|---|---|
$ callStackItemView | chaîne | Le chemin du fichier de vue pour le rendu des exceptions et des erreurs appelle un élément de la pile. par exemple. '@ yii / views / errorHandler / callStackItem.php' |
$ displayVars | tableau | Liste des variables PHP prédéfinies à afficher sur la page d'erreur. par exemple. ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION'] |
$ errorAction | chaîne | La route (par exemple. site / erreur ) à l'action du contrôleur qui sera utilisée pour afficher les erreurs externes. |
$ errorView | chaîne | Chemin du fichier de vue pour le rendu des exceptions sans informations sur la pile d'appels. par exemple. '@ yii / views / errorHandler / error.php' |
$ exceptionView | chaîne | Chemin du fichier de vue pour le rendu des exceptions. par exemple. '@ yii / views / errorHandler / exception.php' |
$ maxSourceLines | entier | Nombre maximum de lignes de code source à afficher. |
$ maxTraceSourceLines | entier | Nombre maximal de lignes de code source de trace à afficher. |
$ previousExceptionView | chaîne | Chemin du fichier de vue pour le rendu des exceptions précédentes. par exemple. '@ yii / views / errorHandler / previousException.php' |
Généralement, lorsqu'un utilisateur rencontre une erreur grave, nous souhaitons le rediriger vers une page d'erreur descriptive conviviale..
C'est ce que le errorAction
dans errorHandler
Est-ce que. Il redirige vers l'actionError de notre SiteController:
return ['components' => ['errorHandler' => ['errorAction' => 'site / error',],]];
Dans notre SiteController, nous définissons un Erreur
action:
app espace de noms \ contrôleurs; utilisez Yii; utilisez yii \ web \ Controller; La classe SiteController s'étend au contrôleur actions de fonction publique () return ['error' => ['class' => 'yii \ web \ ErrorAction',],];
Voici un gestionnaire d'erreur de base (vous pouvez en lire plus ici):
fonction publique actionError () $ exception = Yii :: $ app-> errorHandler-> exception; if ($ exception! == null) return $ this-> render ('error', ['exception' => $ exception]);
Vous pouvez également répondre différemment en cas d'erreur ou si la demande de page n'existe pas dans votre application:
fonction publique actionError () $ exception = Yii :: $ app-> errorHandler-> exception; if ($ exception instanceof \ yii \ web \ NotFoundHttpException) // tous les contrôleurs non existants + les actions aboutiront ici return $ this-> render ('pnf'); // page non trouvée else return $ this-> render ('error', ['exception' => $ exception]);
Voici mon gestionnaire d'erreur de page introuvable 404:
Vous pourriez théoriquement inclure un plan du site contenant des liens, des pages suggérées similaires à la demande de page, une fonction de recherche et un lien de support de contact sur vos pages d'erreur. Tous ces éléments peuvent aider l’utilisateur à récupérer et à progresser avec élégance..
Voici ma page d'erreur générale actuelle (évidemment j'ai des fonctionnalités à ajouter):
Si nous voulons surveiller une section de code pour résoudre les problèmes, nous pouvons utiliser un bloc catch try PHP. Ci-dessous, nous expérimenterons en déclenchant une erreur fatale de division par zéro:
utilisez Yii; utilisez yii \ base \ ErrorException;… try 10/0; catch (ErrorException $ e) Yii :: warning ("Division par zéro."); …
le capture
La réponse ci-dessus consiste à générer un avertissement pour le journal. Yii a beaucoup de journalisation:
Si, au lieu de consigner un événement, vous souhaitez diriger l'utilisateur vers la page d'erreur configurée précédemment, vous pouvez générer une exception avec l'événement:
utilisez yii \ web \ NotFoundHttpException; lancer la nouvelle NotFoundHttpException ();
Voici un exemple où nous lançons une exception avec un code de statut HTTP spécifique et un message personnalisé:
essayez 10/0; catch (ErrorException $ e) jette new \ yii \ web \ HttpException (451, "L’humour de Tom McFarlin est souvent perdu pour moi (et beaucoup de gens).");
Voici à quoi ressemble ce code pour l'utilisateur:
Toutes les erreurs dans Yii sont enregistrées en fonction de la manière dont vous les avez configurées. Vous pouvez également être intéressé par mon tutoriel sur Sentry et Rollbar pour la connexion à Yii:
J'espère que vous avez apprécié notre exploration de la gestion des erreurs et des exceptions. Surveillez les prochains tutoriels de notre série Programmation avec Yii2 pendant que nous continuons à plonger dans différents aspects du cadre..
Si vous souhaitez approfondir votre connaissance du développement d’applications Yii, consultez notre série Construire son démarrage avec PHP, qui utilise le modèle avancé de Yii2. Il raconte l'histoire de la programmation de chaque étape de Meeting Planner. C'est très utile si vous voulez en savoir plus sur la création d'applications dans Yii.
Si vous souhaitez savoir quand le prochain tutoriel Yii2 arrive, suivez-moi sur @lookahead_io sur Twitter ou consultez ma page d'instructeur..