Yii - Fehlerbehandlung

Yii enthält einen eingebauten Fehlerhandler. Der Yii-Fehlerbehandler führt folgende Schritte aus:

  • Konvertiert alle nicht schwerwiegenden PHP-Fehler in abfangbare Ausnahmen.
  • Zeigt alle Fehler und Ausnahmen mit einem detaillierten Aufrufstapel an.
  • Unterstützt verschiedene Fehlerformate.
  • Unterstützt die Verwendung einer Controller-Aktion zum Anzeigen von Fehlern.

Um die Fehlerbehandlungsroutine zu deaktivieren, müssen Sie die Konstante YII_ENABLE_ERROR_HANDLER im Eingabeskript als falsch definieren. Der Fehlerbehandler ist als Anwendungskomponente registriert.

Step 1 - Sie können es folgendermaßen konfigurieren.

return [
   'components' => [
      'errorHandler' => [
         'maxSourceLines' => 10,
      ],
   ],
];

Mit der obigen Konfiguration wird die Anzahl der anzuzeigenden Quellcodezeilen auf 10 festgelegt. Der Fehlerbehandler konvertiert alle nicht schwerwiegenden PHP-Fehler in abfangbare Ausnahmen.

Step 2 - Fügen Sie eine neue Funktion mit dem Namen hinzu actionShowError() an den SiteController.

public function actionShowError() {
   try {
      5/0;
   } catch (ErrorException $e) {
      Yii::warning("Ooops...division by zero.");
   }
   // execution continues...
}

Step 3 - Gehen Sie zur URL http://localhost:8080/index.php?r=site/show-error. Sie sehen eine Warnmeldung.

Wenn Sie dem Benutzer zeigen möchten, dass seine Anfrage ungültig ist, können Sie die werfen yii\web\NotFoundHttpException.

Step 4 - Ändern Sie die actionShowError() Funktion.

public function actionShowError() {
   throw new NotFoundHttpException("Something unexpected happened");
}

Step 5 - Geben Sie die Adresse ein http://localhost:8080/index.php?r=site/show-errorin der Adressleiste. Sie sehen den folgenden HTTP-Fehler.

Wenn die YII_DEBUG-Konstante true ist, zeigt der Fehlerbehandler Fehler mit einem detaillierten Aufrufstapel an. Wenn die Konstante falsch ist, wird nur die Fehlermeldung angezeigt. Standardmäßig zeigt der Fehlerbehandler Fehler in diesen Ansichten an -

  • @yii/views/errorHandler/exception.php - Die Ansichtsdatei wird verwendet, wenn Fehler mit Informationen zum Aufrufstapel angezeigt werden sollen.

  • @yii/views/errorHandler/error.php - Die Ansichtsdatei wird verwendet, wenn Fehler ohne Call-Stack-Informationen angezeigt werden sollen.

Sie können dedizierte Fehleraktionen verwenden, um die Fehleranzeige anzupassen.

Step 6 - Ändern Sie die errorHandler Anwendungskomponente in der config/web.php Datei.

<?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;
?>

Die obige Konfiguration definiert, dass, wenn ein Fehler ohne den Aufrufstapel angezeigt werden muss, die site/error Aktion wird ausgeführt.

Step 7 - Ändern Sie die actions() Methode des SiteController.

public function actions() {
   return [
      'error' => [
         'class' => 'yii\web\ErrorAction',
      ],
   ];
}

Der obige Code definiert, dass wenn ein error auftritt, wird die Fehleransicht gerendert.

Step 8 - Erstellen Sie eine Datei mit dem Namen error.php unter dem Verzeichnis 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 - Gehen Sie zur Adresse http://localhost:8080/index.php?r=site/show-errorwird die angepasste Fehleransicht angezeigt.