YII2 全局异常处理深入讲解 |
|
首先,我们必须理性认识到,任何一个即使稳定的系统中也是存在着大量的 bug,不管是因为什么原因导致的错误,我们都是需要做好防范的,最好的结果当然是将异常纠正过来,返回客户端一个正确的响应结果,但绝大多数情况下是没办法返回正常结果的,只能返回一个客户端一个异常的信息 。
要处理好这个问题,我认为比较简单的方式就是将需要处理的异常按照场景先做一个分类 。
在 ThinkPHP 或者其他框架中,如果出现异常,则会出现框架的一个异常页面 。
但如果我们开发的是 API,直接返回一个页面给客户端显然不合理,因为别人在使用你的接口的时候还需要解析界面分析出结果,这么做是十分不合理的,所以,我们需要对框架的异常处理进行重写 。以下使用 Yii2 框架作为例子讲解重写的逻辑: 首先,我们需要找到 Yii 框架异常处理的设置(../config/web.php)
'components' => [
'errorHandler' => [
'errorAction' => 'site/error',
'class' => 'appcommonExceptionHandler',//(这里配置我们自己写的异常处理方法)
],
为了让我们的程序可以简单的辨别出客户的不当调用导致的错误和服务器的错误,我们可以写一个客户的异常类 。新建 commonUserException.php 文件
class UserException extends Exception
{
// HTTP 状态码 404,200
/**
* @var int|mixed
*/
public $code = 400;
// 错误具体信息
/**
* @var mixed|string
*/
public $msg = '参数错误';
// 自定义的错误码
/**
* @var int|mixed
*/
public $errorCode = 10000;
/**
* UserException constructor.
* @param $params
*/
public function __construct($params=[]) {
// 如果传过来的不是数组则不进行对象初始化
if (!is_array($params)) {
return;
}
// 判断数组有没有该键值
if (array_key_exists('code',$params)) {
$this->code = $params['code'];
}
if (array_key_exists('msg',$params)) {
$this->msg = $params['msg'];
}
if (array_key_exists('errorCode',$params)) {
$this->errorCode = $params['errorCode'];
}
}
}
新建 这就完成了全局的异常处理,让我们看看效果 当我们开启 debug 模式时抛出错误:
关闭 debug 模式,抛出服务器端异常:
public function actionIndex()
{
throw new Exception();
}
关闭 debug 模式,抛出客户端异常:
public function actionIndex()
{
throw new UserException();
}
到此这篇关于YII2 全局异常处理深入讲解的文章就介绍到这了,更多相关YII2 全局异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! |