Yii - त्रुटि से निपटने

Yii में एक अंतर्निहित त्रुटि हैंडलर शामिल है। Yii त्रुटि हैंडलर निम्नलिखित करता है -

  • सभी गैर-घातक PHP त्रुटियों को बिल्ली के समान अपवादों में परिवर्तित करता है।
  • सभी त्रुटियों और अपवादों को एक विस्तृत कॉल स्टैक के साथ प्रदर्शित करता है।
  • विभिन्न त्रुटि स्वरूपों का समर्थन करता है।
  • त्रुटियों को प्रदर्शित करने के लिए एक नियंत्रक कार्रवाई का उपयोग करने का समर्थन करता है।

त्रुटि हैंडलर को अक्षम करने के लिए, आपको प्रविष्टि स्क्रिप्ट में गलत होने के लिए YII_ENABLE_ERROR_HANDLER को परिभाषित करना चाहिए। त्रुटि हैंडलर एक आवेदन घटक के रूप में पंजीकृत है।

Step 1 - आप इसे निम्नलिखित तरीके से कॉन्फ़िगर कर सकते हैं।

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

उपरोक्त कॉन्फ़िगरेशन 10 को प्रदर्शित करने के लिए स्रोत कोड लाइनों की संख्या निर्धारित करता है। त्रुटि हैंडलर सभी गैर-घातक PHP त्रुटियों को कैटलेबल आयनों में परिवर्तित करता है।

Step 2 - नामक एक नया फ़ंक्शन जोड़ें actionShowError() SiteController के लिए।

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

Step 3 - URL पर जाएं http://localhost:8080/index.php?r=site/show-error। आपको एक चेतावनी संदेश दिखाई देगा।

यदि आप उपयोगकर्ता को दिखाना चाहते हैं कि उसका अनुरोध अमान्य है, तो आप उसे फेंक सकते हैं yii\web\NotFoundHttpException

Step 4 - संशोधित करें actionShowError() समारोह।

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

Step 5 - पता टाइप करें http://localhost:8080/index.php?r=site/show-errorएड्रेस बार में। आप निम्न HTTP त्रुटि देखेंगे।

जब YII_DEBUG निरंतर सही है, तो त्रुटि हैंडलर विस्तृत कॉल स्टैक के साथ त्रुटियों को प्रदर्शित करेगा। जब निरंतर गलत है, केवल त्रुटि संदेश प्रदर्शित किया जाएगा। डिफ़ॉल्ट रूप से, त्रुटि हैंडलर इन विचारों का उपयोग करके त्रुटियां दिखाता है -

  • @yii/views/errorHandler/exception.php - व्यू फ़ाइल का उपयोग तब किया जाता है जब कॉल स्टैक जानकारी के साथ त्रुटियों को प्रदर्शित किया जाना चाहिए।

  • @yii/views/errorHandler/error.php - कॉल स्टैक जानकारी के बिना त्रुटियों को प्रदर्शित किया जाना चाहिए जब दृश्य फ़ाइल का उपयोग किया जाता है।

आप त्रुटि प्रदर्शन को अनुकूलित करने के लिए समर्पित त्रुटि क्रियाओं का उपयोग कर सकते हैं।

Step 6 - संशोधित करें errorHandler में आवेदन घटक config/web.php फ़ाइल।

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

उपरोक्त कॉन्फ़िगरेशन परिभाषित करता है कि जब कॉल स्टैक के बिना किसी त्रुटि को प्रदर्शित करने की आवश्यकता होती है, तो site/error कार्रवाई को अंजाम दिया जाएगा।

Step 7 - संशोधित करें actions() SiteController की विधि।

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

उपरोक्त कोड परिभाषित करता है, कि जब ए error तब होता है, त्रुटि दृश्य प्रदान किया जाएगा।

Step 8 - नामक एक फ़ाइल बनाएँ error.php विचारों / साइट निर्देशिका के तहत।

<?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 - पते पर जाएं http://localhost:8080/index.php?r=site/show-error, आपको अनुकूलित त्रुटि दृश्य दिखाई देगा।