Yii - Xử lý lỗi
Yii bao gồm một trình xử lý lỗi được tích hợp sẵn. Trình xử lý lỗi Yii thực hiện như sau:
- Chuyển đổi tất cả các lỗi PHP không nghiêm trọng thành các ngoại lệ có thể bắt được.
- Hiển thị tất cả các lỗi và ngoại lệ với ngăn xếp cuộc gọi chi tiết.
- Hỗ trợ các định dạng lỗi khác nhau.
- Hỗ trợ sử dụng hành động của bộ điều khiển để hiển thị lỗi.
Để vô hiệu hóa trình xử lý lỗi, bạn nên xác định hằng số YII_ENABLE_ERROR_HANDLER là sai trong tập lệnh nhập. Trình xử lý lỗi được đăng ký như một thành phần ứng dụng.
Step 1 - Bạn có thể cấu hình nó theo cách sau.
return [
'components' => [
'errorHandler' => [
'maxSourceLines' => 10,
],
],
];
Cấu hình trên đặt số dòng mã nguồn được hiển thị là 10. Trình xử lý lỗi chuyển đổi tất cả các lỗi PHP không nghiêm trọng thành các ngoại lệ có thể bắt được.
Step 2 - Thêm một chức năng mới được gọi là actionShowError() vào SiteController.
public function actionShowError() {
try {
5/0;
} catch (ErrorException $e) {
Yii::warning("Ooops...division by zero.");
}
// execution continues...
}
Step 3 - Đi tới URL http://localhost:8080/index.php?r=site/show-error. Bạn sẽ thấy một thông báo cảnh báo.
Nếu bạn muốn cho người dùng thấy rằng yêu cầu của họ không hợp lệ, bạn có thể ném yii\web\NotFoundHttpException.
Step 4 - Sửa đổi actionShowError() chức năng.
public function actionShowError() {
throw new NotFoundHttpException("Something unexpected happened");
}
Step 5 - Nhập địa chỉ http://localhost:8080/index.php?r=site/show-errortrong thanh địa chỉ. Bạn sẽ thấy lỗi HTTP sau.
Khi hằng số YII_DEBUG là true, trình xử lý lỗi sẽ hiển thị lỗi với ngăn xếp cuộc gọi chi tiết. Khi hằng số sai, chỉ có thông báo lỗi được hiển thị. Theo mặc định, trình xử lý lỗi hiển thị lỗi khi sử dụng các dạng xem này:
@yii/views/errorHandler/exception.php - tệp dạng xem được sử dụng khi các lỗi sẽ được hiển thị với thông tin ngăn xếp cuộc gọi.
@yii/views/errorHandler/error.php - tệp dạng xem được sử dụng khi các lỗi sẽ được hiển thị mà không có thông tin ngăn xếp cuộc gọi.
Bạn có thể sử dụng các thao tác lỗi chuyên dụng để tùy chỉnh hiển thị lỗi.
Step 6 - Sửa đổi errorHandler thành phần ứng dụng trong config/web.php tập tin.
<?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;
?>
Cấu hình trên xác định rằng khi một lỗi cần được hiển thị mà không có ngăn xếp cuộc gọi, site/error hành động sẽ được thực hiện.
Step 7 - Sửa đổi actions() phương thức của SiteController.
public function actions() {
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
Đoạn mã trên định nghĩa rằng khi một error xảy ra, chế độ xem lỗi sẽ được hiển thị.
Step 8 - Tạo một tệp có tên error.php trong thư mục 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 - Đến địa chỉ http://localhost:8080/index.php?r=site/show-error, bạn sẽ thấy chế độ xem lỗi tùy chỉnh.