En utilisant Yii2, nous avons constaté qu'une fois qu'une erreur se produit dans le programme, Yii2 peut afficher automatiquement son interface d'invite d'erreur dédiée, qui est complètement différente de l'interface d'invite d'erreur qui est apparue lorsque nous a écrit le programme original.
Comment cela se fait-il exactement : Où est mis en place la surveillance ? Ou où utiliser try catch ? "(Apprentissage recommandé :
Traitement personnalisé des erreurs Yii2
Dans le tutoriel officiel, il nous dit que pour activer les erreurs personnalisées, nous devons configurer les composants comme suit :return [ // ... 'components' => [ // ... 'errorHandler' => [ 'errorAction' => 'site/error', ], ] // ... ];
Méthode de traitement du noyau d'erreur Yii2
dans Yii2 Dans le traitement personnalisé des erreurs, après avoir Comprendre le principe de l'enregistrement des erreurs Yii2 et connaître l'apparition des erreurs, Yii2 appellera les méthodes handleException et handleError de l'objet de classe yiiwebErrorHandler
En fait, il n'y a pas de handleException et handleError dans la classe yiiwebErrorHandler. ., mais dans sa classe de base yiibaseErrorHandler, les deux fonctions finiront par appeler la méthode renderException de yiiwebErrorHandler, le code est le suivant :# yii\web\ErrorHandler /** * Renders the exception. * @param \Exception $exception the exception to be rendered. */ protected function renderException($exception) { // ... // 注意:控制错误是否能自定义的关键 // !YII_DEBUG 表示了如果你现在是在 Debug 模式下,那么不能自定义错误 // 即使你配置了组件的 'errorHandler' => ['errorAction' => 'site/error'] 参数 $useErrorView = $response->format === Response::FORMAT_HTML && (!YII_DEBUG || $exception instanceof UserException); // 传递到自定义错误处理方法 if ($useErrorView && $this->errorAction !== null) { $result = Yii::$app->runAction($this->errorAction); if ($result instanceof Response) { $response = $result; } else { $response->data = $result; } } // ... }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!