Yii 内置了一个yii\web\ErrorHandler错误处理器,它使错误处理更方便, Yii错误处理器做以下工作来提升错误处理效果:
1.所有非致命PHP错误(如,警告,提示)会转换成可获取异常;
2.异常和致命的PHP错误会被显示,在调试模式会显示详细的函数调用栈和源代码行数。
3.支持使用专用的控制器操作来显示错误;
4.支持不同的错误响应格式;
使用指定的错误操作来自定义错误显示更方便, 为此,首先配置errorHandler组件的 yii\web\ErrorHandler::errorAction 属性,类似如下:return [
'components' => [
'errorHandler' => [
'errorAction' => 'site/error',
],
]
];
yii\web\ErrorHandler::errorAction 属性使用路由到一个操作, 上述配置表示不用显示函数调用栈信息的错误会通过执行site/error操作来显示。
可以创建site/error 操作如下所示:namespace app\controllers;
use Yii;
use yii\web\Controller;
class SiteController extends Controller{
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
}
上述代码定义error 操作使用yii\web\ErrorAction 类,该类渲染名为error视图来显示错误。
除了使用yii\web\ErrorAction, 可定义error 操作使用类似如下的操作方法:public function actionError(){
$exception = Yii::$app->errorHandler->exception;
if ($exception !== null) {
return $this->render('error', ['exception' => $exception]);
}
}
在views层会有一个错误渲染的页面site/error.php<?php
use yii\helpers\Html;
$this->title = $name;
?>
= Html::encode($this->title) ?>
= nl2br(Html::encode($message)) ?>
The above error occurred while the Web server was processing your request.
Please contact us if you think this is a server error. Thank you.
如果想改变默认的错误显示样式,就在这个修改这个页面来实现。
默认错误显示如下图所示: