مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

مدیریت خطا یا Error Handeling در فریمورک Yii


Yii شامل یک مدیریت خطای درونی (built-in error handler) است. error handler در فریمورک Yii کارهای زیر را انجام می دهد:

  • تمام خطاهای غیر مهم (non-fatal errors ) را به exception های قابل استفاده یا باصطلاحاً cacheable تبدیل می کند.
  • تمامی errorها و exceptionها را در قالب یک call stack با جزئیات کامل نمایش می دهد.
  • از فرمت های مختلف error پشتیبانی می کند.
  • از action های conroller برای نمایش errorها پشتیبانی می کند.

برای غیرفعال کردن error handler، باید ثابت YII_ENABLE_ERROR_HANDLER را در اسکریپت ورودی تعریف نمایید و مقدار آن را false قرار دهید.

error handler به عنوان یکی از کامپوننت های برنامه ثبت شده است.

مرحله 1 - شما می توانید آن را به روش زیر پیکربندی کنید.

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

در پیکربندی بالا، حداکثر تعداد خطوط source code جهت نمایش، با عدد 10 تنظیم شده است. error handler تمام خطاهای غیرمهم (non-fatal errors ) را به exceptionهای قابل استفاده یا باصطلاحاً cacheable تبدیل می کند.

مرحله 2 - یک تابع جدید به نام actionShowError() به SiteController اضافه کنید.

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

مرحله 3 - به آدرس http://localhost:8080/index.php?r=site/show-error بروید. آنچه که مشاهده خواهید کرد یک پیام هشدار یا warning message می باشد.

اگر می خواهید کاربری را نشان دهید که درخواستش نامعتبر است، می توانید از yii\web\NotFoundHttpException استفاده کنید.

مرحله 4 - تابع actionShowError() را ویرایش کنید.

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

مرحله 5 – اگر در آدرسبار مرورگر وب تان آدرس http://localhost:8080/index.php?r=site/show-error را تایپ کنید، خطای HTTP زیر را مشاهده خواهید کرد.

هنگامی که ثابت YII_DEBUG برابر با true است، error handler ، داده ها را دریک call stack با جزئیات کامل نمایش می دهد. هنگامی که ثابت برابر با false باشد، تنها پیام خطا نمایش داده می شود. به طور پیش فرض، error handler خطاها را با استفاده از viewهای زیر نمایش می دهد :

  • @yii/views/errorHandler/exception.php – از این فایل view زمانی استفاده می شود که خطاها باید با اطلاعات call stack نمایش داده شوند.
  • @yii/views/errorHandler/error.php – از این فایل view زمانی استفاده می شود که خطاها باید با اطلاعات call stack نمایش داده شوند.

برای اینکه نحوه ی نمایش error ها را سفارشی کنید از error actionهای اختصاصی استفاده نمایید.

مرحله 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;
?>

پیکربندی فوق بیان می کند وقتی یک خطا بدون نیاز به call stack نمایش داده می شود، اکشن site/error اجرا می شود.

مرحله 7 – متد actions() در SiteController را ویرایش نمایید.

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

کد بالا بیان می کند که وقتی یک خطا رخ می دهد، ویو error رندر می شود.

مرحله 8 - یک فایل با نام error.php در دایرکتوری 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>

مرحله 9 – در مرورگر وب تان به آدرس http://localhost:8080/index.php?r=site/show-error بروید، view error سفارشی را مشاهده خواهید کرد.

فصلِ: 14 , تعداد قسمت ها: 188 , سطح: صفر تا صد

این فصل در یک نگاه:

سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…
فصلِ: 8 , تعداد قسمت ها: 77 , سطح: صفر تا صد

این فصل در یک نگاه:

  پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید