Yii - Gestion des erreurs
Yii inclut un gestionnaire d'erreurs intégré. Le gestionnaire d'erreurs Yii effectue les opérations suivantes -
- Convertit toutes les erreurs PHP non fatales en exceptions capturables.
- Affiche toutes les erreurs et exceptions avec une pile d'appels détaillée.
- Prend en charge différents formats d'erreur.
- Prend en charge l'utilisation d'une action de contrôleur pour afficher les erreurs.
Pour désactiver le gestionnaire d'erreurs, vous devez définir la constante YII_ENABLE_ERROR_HANDLER sur false dans le script d'entrée. Le gestionnaire d'erreurs est enregistré en tant que composant d'application.
Step 1 - Vous pouvez le configurer de la manière suivante.
return [
'components' => [
'errorHandler' => [
'maxSourceLines' => 10,
],
],
];
La configuration ci-dessus définit le nombre de lignes de code source à afficher à 10. Le gestionnaire d'erreurs convertit toutes les erreurs PHP non fatales en exceptions capturables.
Step 2 - Ajouter une nouvelle fonction appelée actionShowError() au SiteController.
public function actionShowError() {
try {
5/0;
} catch (ErrorException $e) {
Yii::warning("Ooops...division by zero.");
}
// execution continues...
}
Step 3 - Aller à l'URL http://localhost:8080/index.php?r=site/show-error. Vous verrez un message d'avertissement.
Si vous voulez montrer à l'utilisateur que sa demande est invalide, vous pouvez lancer le yii\web\NotFoundHttpException.
Step 4 - Modifier le actionShowError() fonction.
public function actionShowError() {
throw new NotFoundHttpException("Something unexpected happened");
}
Step 5 - Tapez l'adresse http://localhost:8080/index.php?r=site/show-errordans la barre d'adresse. Vous verrez l'erreur HTTP suivante.
Lorsque la constante YII_DEBUG est vraie, le gestionnaire d'erreurs affiche les erreurs avec une pile d'appels détaillée. Lorsque la constante est fausse, seul le message d'erreur sera affiché. Par défaut, le gestionnaire d'erreurs affiche les erreurs en utilisant ces vues -
@yii/views/errorHandler/exception.php - le fichier de vue est utilisé lorsque des erreurs doivent être affichées avec des informations de pile d'appels.
@yii/views/errorHandler/error.php - le fichier de vue est utilisé lorsque des erreurs doivent être affichées sans informations sur la pile d'appels.
Vous pouvez utiliser des actions d'erreur dédiées pour personnaliser l'affichage des erreurs.
Step 6 - Modifier le errorHandler composant d'application dans le config/web.php fichier.
<?php
$params = require(__DIR__ . '/params.php');
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this
//is required by cookie validation
'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO',
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
'errorHandler' => [ 'errorAction' => 'site/error', ],
//other components...
'db' => require(__DIR__ . '/db.php'),
],
'modules' => [
'hello' => [
'class' => 'app\modules\hello\Hello',
],
],
'params' => $params,
];
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
return $config;
?>
La configuration ci-dessus définit que lorsqu'une erreur doit être affichée sans la pile d'appels, le site/error l'action sera exécutée.
Step 7 - Modifier le actions() méthode du SiteController.
public function actions() {
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
Le code ci-dessus définit que lorsqu'un error se produit, la vue d'erreur sera rendue.
Step 8 - Créez un fichier appelé error.php sous le répertoire views / site.
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = $name;
?>
<div class = "site-error">
<h2>customized error</h2>
<h1><?= Html::encode($this->title) ?></h1>
<div class = "alert alert-danger">
<?= nl2br(Html::encode($message)) ?>
</div>
<p>
The above error occurred while the Web server was processing your request.
</p>
<p>
Please contact us if you think this is a server error. Thank you.
</p>
</div>
Step 9 - Aller à l'adresse http://localhost:8080/index.php?r=site/show-error, vous verrez la vue d'erreur personnalisée.