ThinkPHP 全局异常处理
wqy的笔记:http://www.upwqy.com/details/273.html
在thinkphp6 和 thinkphp5 全局异常处理 稍有不同
ThinkPHP6
在 tp6 中 框架已经给出了 应用异常处理类 ExceptionHandle
但是默认的异常处理 抛出的不是json格式的结构,不是我们想要的,所以要处理一下
看以下代码 在 render 函数中 异常实例 $e 有两种类型 一种是BaseException 一种是 框架默认抛出的异常
这里主要是说 BaseException 这是自定义的异常 ,用于处理返回结构,状态码,返回信息等数据,可以按照自己的需要处理。
具体的 返回结果返回处理 可以去 http://www.upwqy.com/details/216.html 查看
namespace app;
use app\common\ApiErrCode;
use app\common\exception\BaseException;
use app\common\response\JsonResponse;
use think\db\exception\DataNotFoundException;
use think\db\exception\ModelNotFoundException;
use think\exception\Handle;
use think\exception\HttpException;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
use think\Response;
use Throwable;
/**
* 应用异常处理类
*/
class ExceptionHandle extends Handle
{
use JsonResponse;
/**
* 不需要记录信息(日志)的异常类列表
* @var array
*/
protected $ignoreReport = [
HttpException::class,
HttpResponseException::class,
ModelNotFoundException::class,
DataNotFoundException::class,
ValidateException::class,
];
/**
* 记录异常信息(包括日志或者其它方式记录)
*
* @access public
* @param Throwable $exception
* @return void
*
*/
public function report(Throwable $exception): void
{
// 使用内置的方式记录异常日志
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
* @access public
* @param \think\Request $request
* @param Throwable $e
* @return Response
*/
public function render($request, Throwable $e): Response
{
// 其他错误交给系统处理
// return parent::render($request, $e);
// 添加自定义异常处理机制
if($e instanceof BaseException){
$code = $e->getCode();
$message = $e->getMessage();
}else{
$code = $e->getCode();
if(!$code || $code < 0){
$code = ApiErrCode::unknown_err['code'];
}
$message = $e->getMessage() ? : ApiErrCode::unknown_err['msg'];
}
return $this->jsonData($code,$message);
}
}
下面来看 BaseException ,这里表示基础异常类
其中 ApiErrCode 是定义的 错误码类 可以去 http://www.upwqy.com/details/216.html 查看
namespace app\common\exception;
use app\common\ApiErrCode;
use think\Exception;
/**
* 基础异常
* @user yiqiu
* @email 529857614@qq.com
* @date 2021/2/19 20:45
* @blog http://www.upwqy.com
*/
class BaseException extends \Exception
{
protected $code = ApiErrCode::unknown_err['code'];
protected $message = ApiErrCode::unknown_err['msg'];
public function __construct($params = [])
{
if(is_array($params) ){
if(isset($params['code']) && $params['code']){
$this->code = $params['code'];
}
if(isset($params['msg']) && $params['msg']){
$this->message = $params['msg'];
}
}else if(is_string($params)){
$this->message = $params;
}
parent::__construct($this->message, $this->code);
}
}
然后我们可以自定义一些异常类 ,比如下面的 ParameterException.php 表示参数异常时的处理
namespace app\common\exception;
use app\common\ApiErrCode;
class ParameterException extends BaseException
{
protected $code = ApiErrCode::invalid_params['code'];
protected $message = ApiErrCode::invalid_params['msg'];
}
实例:
$user = User::where('id',1)->find();
if(!$user){
throw new ParameterException('用户不存在');
}
当需要指定的异常,直接 使用 throw new ParameterException('用户不存在'); 即可,返回结果如下,并且可以在任何地方使用
{
"code": 204,
"msg": "用户不存在",
"data": "",
"timestamp": 1622604524
}
THinkPHP5
在tp5框架中,我们需要手动创建应用异常处理类。ExceptionHandler.php
并且在配置中 修改配置
'exception_handle' => 'api\lib\exception\ExceptionHandler',
ThinkPHP 全局异常处理的更多相关文章
- 第6章 AOP与全局异常处理6.5-6.11 慕课网微信小程序开发学习笔记
https://coding.imooc.com/learn/list/97.html 目录: 第6章 AOP与全局异常处理6-1 正确理解异常处理流程 13:236-2 固有的处理异常的思维模式与流 ...
- mvc自定义全局异常处理
异常信息处理是任何网站必不可少的一个环节,怎么有效显示,记录,传递异常信息又成为重中之重的问题.本篇将基于上篇介绍的html2cancas截图功能,实现mvc自定义全局异常处理.先看一下最终实现效果: ...
- 在.NET Core程序中设置全局异常处理
以前我们想设置全局异常处理只需要这样的代码: AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledExc ...
- springMvc全局异常处理
本文中只测试了:实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器 对已有代码没有入侵性等优点,同时,在异常处理时能获取导致出现异常的对象,有利于提 ...
- MVC 全局异常处理及禁用显示头
MVC网站的global.asax中的Application_Start方法里,有这样一段代码: public class MvcApplication : System.Web.HttpApplic ...
- Spring MVC 解决无法访问静态文件和"全局异常处理"
我们都知道,Spring MVC的请求都会去找controller控制器,若果我们页面中引入了一个外部样式,这样是没效果的, 我们引入样式的时候是通过<like href="...&q ...
- Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本文内容 为什么要全局异常处理? WebFlux REST 全 ...
- .NET MVC全局异常处理(二)
目录 .NET MVC全局异常处理(二) MVC过滤器Filter .NET MVC全局异常处理(二) 对上节的内容进行了补充 MVC过滤器Filter MVC有四种过滤器:Authorization ...
- .NET MVC全局异常处理(一)
目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关的配置,但没有实际做过,以为改下设定就 ...
随机推荐
- 闲暇时光里最好的挖矿体验——CPU挖乌龟币
我之前其实是不玩加密货币的,主要是没有钱取投资(tou ji),也没有钱去投资矿机. 不过前几天CSDN推送了一个短文,<黑客用GitHub服务器挖矿,三天跑了3万个任务,代码惊现中文> ...
- Android使用ContentProvider初始化SDK库方案总结
做Android SDK开发的时候,一般我们会将初始化的方法封装为,然后让调用SDK的开发者在Application的onCreate方法中进行初始化.但是目前一些主流的SDK框架,并没有提供相关的方 ...
- 02- Java搭建环境搭建
Java开发环境安装与配置 运行安装包 配置环境变量 验证Java是否正确安装 JDK目录 bin目录:存放可执行文件 lib目录:存放java的类库文件 include目录:存放于本地方法的文件 j ...
- php 二维数组排序详解: array_multisort
定义和用法 array_multisort() 函数返回一个排序数组.您可以输入一个或多个数组.函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序. 注释: ...
- android so加载
本文分析so加载的步骤,其实在之前dalvik浅析二中也有提及,但那重点关注的是jni.android中so库的加载,代码如下: loadLibrary("nanosleep"); ...
- Windows PE 重定位表编程(枚举重定位地址)
原理之前单独总结过,在这里: http://blog.csdn.net/u013761036/article/details/54051347 下面是枚举重定位信息的代码: // ReLocation ...
- drbd虚拟机宕机恢复方法
问题现象 云南计算节点YN-ec-compute-19因系统盘损坏宕机且操作系统无法恢复,其上本地虚拟机无法疏散且无法迁移 拟采用drbd备份的数据对compute19上的虚拟机进行恢复 恢复方法 1 ...
- 【python】Leetcode每日一题-前缀树(Trie)
[python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...
- 【vue-07】vue-router
Vue-router官网 安装 vue-router是一个插件包,所以我们还是需要用npm 来进行安装.打开命令行工具,进入你的项目目录,输入下面命令. npm install vue-router ...
- 【mybatis】mybaits generator 逆向工程的使用
mybatis逆向工程官方网站:http://www.mybatis.org/generator/quickstart.html 准备xml文件.如下generator.xml全部内容 <?xm ...