首页 > php框架 > YII > 正文

yii2自定义错误处理

(*-*)浩
发布: 2019-12-14 09:34:20
原创
3416 人浏览过

yii2自定义错误处理

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

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

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

Yii2 错误自定义处理

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

return [
    // ...
    
    'components' => [
        // ...
        
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
    ]
    
    // ...
];
登录后复制

Yii2 错误核心处理方法

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

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

# yii\web\ErrorHandler
/**
 * 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 模式下才能生效

以上是yii2自定义错误处理的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板