视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
yii2自定义错误处理
2020-11-03 18:22:58 责编:小采
文档


在 Yii2 使用中,我们发现一但程序出现错误,Yii2 就能自动显示其专用的错误提示界面,和我们写原生态时出现的错误提示界面完全不一样。

它究竟是怎么做到的呢:是在哪里设置监听的?亦或在哪里用的try catch?”。 (推荐学习:yii框架)

其实 PHP 有自己专用的错误处理 API, 当程序出现问题时,可以自动调用指定函数。而 Yii2 正是利用这一点,在其启动的时候,使用 PHP 内置的 set_error_handler 将自己的错误处理注册进步并关闭 PHP 自身的错误显示。

Yii2 错误自定义处理

在 官方教程 中,它告诉我们要开启自定义的错误,需要进行如下配置组件:

return [
 // ...
 
 'components' => [
 // ...
 
 'errorHandler' => [
 'errorAction' => 'site/error',
 ],
 ]
 
 // ...
];

Yii2 错误核心处理方法

在 Yii2 错误自定义处理 中我们了解了 Yii2 错误注册的原理并知道错误的发生后,Yii2 将调用 yiiwebErrorHandler 类对象的 handleException 和 handleError 方法。

其实 yiiwebErrorHandler 类中并没有 handleException 和 handleError 方法,但是在其基类 yiiaseErrorHandler 有,这两个函数最终都将调用 yiiwebErrorHandler 的 renderException 方法,代码如下:

# yiiwebErrorHandler
/**
 * Renders the exception.
 * @param Exception $exception the exception to be rendered.
 */
protected function renderException($exception)
{
 // ...
 // 注意:控制错误是否能自定义的关键
 // !YII_DEBUG 表示了如果你现在是在 Debug 模式下,那么不能自定义错误
 // 即使你配置了组件的 'errorHandler' => ['errorAction' => 'site/error'] 参数
 $useErrorView = $response->format === Response::FORMAT_HTML && (!YII_DEBUG || $exception instanceof UserException);
 // 传递到自定义错误处理方法
 if ($useErrorView && $this->errorAction !== null) {
 $result = Yii::$app->runAction($this->errorAction);
 if ($result instanceof Response) {
 $response = $result;
 } else {
 $response->data = $result;
 }
 }
 
 // ...
}

在最终的错误显示方法 renderException 我们可以看出:自定义的错误需要在非 DEBUG 模式下才能生效

下载本文
显示全文
专题