tp5 ThinkPHP5 自定义异常处理类
在项目的开发过程中异常抛出尤为重要不仅能够做出友好提示帮助掩盖我们伟大的程序员们尴尬的瞬间,还能做到提示开发人员代码白编写的错误,下面进行自定义异常抛出类,纯属个人理解,希望大家指正
首先在框架中我们可以自定义目录结构用来做异常类的存储位置例如文件目录为以下红框中

定义目录结构后阐述一下我理解的异常类的工作流程,见名知意既然是异常抛出那么只有在代码出现问题的时候或者是逻辑出现异常的时候会进行抛出,那么我认为这就会出现两种情况,
第一种是用户传输的参数或者用户操作的流程有问题这种情况下并不是我们的开发的代码或者是业务逻辑出现的致命错误,直白的将这种情况就是用户的请求没有返回相应的数据
第二种是我们的代码存在问题,或者是服务器上面的问题,但是这个问题我们是不需要用户知道的,在这种情况下我们即需要给出用户的友好提示,还需要知道我们的代码具体是哪里出现了问题所以这种情况下我们就需要记录日志
分析了两种情况之后首先创建应对第一种情况的类,命名为BaseException.php在这个类中需要定义的很简单就是对应第一种情况的友好信息
信息中包括的是抛出异常的http状态码、异常的信息、自定义异常的状态码(可选)
但是BaseException.php需要继承Exception虽然我们是自己定义的异常类但是还是需要遵循规律,既然要抛出异常,就需要有捕获异常,BaseException.php代码如下

下面看一下官方手册

很明显官方已经指出我们接下来要做的
定义Z_Exception.php用来继承Handle类并且重写render方法,这样我们就可以将我们自定义的信息进行抛出,并且在这个类中穿插判断用来应对第二种异常的情况

至此存在一个值得注意的问题在config.php中的问题, 自己已经自定义了异常类的要填上!!!!

本身此处为空但我们已经自己定义了异常类,如果没有更改的话会导致致命错误这里大家应该值得注意一下!!!

处理之后继续下一步添加日志
通过入口文见index.php可以追踪到框架的核心文件start.php打开之后看到加载base.php然后打开base.php就可以看到文件的配置项找到log查看文件的路径

由此可以定位到log文件的路径
由此我们更改一下log的路径方便我们以后管理,在index.php中重新定义LOG_PATH的路径

更改文件的路径后我们应该将框架中默认的记录日志的方式进行更改可以参考官方的文档
https://www.kancloud.cn/manual/thinkphp5/118126
更改框架中的日志的记录方式就是在config.php查找Log模块,将日志的type由File更改为test
既然日志是为了应对生产环境下的问题那么我在代码编写的时候就应该在

之后进行日志的记录,但是要是进行日志的记录我们就应该使用框架中的Log类
在Z_Exception.php中定义方法用来写入日志

然后再调用

这样就完成了自定义的类和自定义的日志文件
tp5 ThinkPHP5 自定义异常处理类的更多相关文章
- springmvc自定义异常处理类和<mvc:annotation-driven/>自带异常处理优先级问题
自定义异常类的优先级低于注解驱动的默认异常处理,所以可以给自定义异常处理类,实现一个排序的接口, org.springframework.core.Ordered 改接口的注释: /** * {@c ...
- Asp.net MVC 自定义异常处理类
using ElegantWM.Common; using System; using System.Collections.Generic; using System.Linq; using Sys ...
- SpringBoot系列教程web篇之自定义异常处理HandlerExceptionResolver
关于Web应用的全局异常处理,上一篇介绍了ControllerAdvice结合@ExceptionHandler的方式来实现web应用的全局异常管理: 本篇博文则带来另外一种并不常见的使用方式,通过实 ...
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
在使用SimpleMappingExceptionResolver实现统一异常处理后(参考Spring MVC的异常统一处理方法), 发现出现异常时,log4j无法在控制台输出错误日志.因此需要自定义 ...
- thinkphp5底层基类封装、内部类函数
记录下thinkphp5自定义底层基类.内部类函数使用笔记 大部分笔记来自tp手册. 底层常用代码的封装 在控制器中基类的起着至关重要的作用,整个项目的代码安全,复杂程度,易读性都要看你项目的基类架构 ...
- php 异常处理类
PHP具有很多异常处理类,其中Exception是所有异常处理的基类. Exception具有几个基本属性与方法,其中包括了: message 异常消息内容code 异常代码file 抛出异常的文件名 ...
- 扩展PHP内置的异常处理类
在try代码块中,需要使用throw语句抛出一个异常对象,才能跳到转到catch代码块中执行,并在catch代码块中捕获并使用这个异常类的对象.虽然在PHP中提供的内置异常处理类Exception,已 ...
- 【Flask】abort和errorhandler、app_errorhandler进行请求中断及自定义异常处理
在view函数中,如果需要中断request,可以使用abort(500)或者直接raise exception.当然我们还需要返回一个出错信息给前端,所以需要定制一下ErrorHandler.一般只 ...
- ASP.NET MVC自定义异常处理
1.自定义异常处理过滤器类文件 新建MyExceptionAttribute.cs异常处理类文件
随机推荐
- SDL 小例子
以下利用SDL播放网络流,需要自己配置运行环境,包括SDL和FFmpeg // ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // /* #include &quo ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- Luogu P5048 [Ynoi2019模拟赛]Yuno loves sqrt technology III 分块
这才是真正的$N\sqrt{N}$吧$qwq$ 记录每个数$vl$出现的位置$s[vl]$,和每个数$a[i]=vl$是第几个$vl$,记为$P[i]$,然后预处理出块$[i,j]$区间的答案$f[i ...
- css(name|pro|[,val|fn])
css(name|pro|[,val|fn]) 概述 访问匹配元素的样式属性.大理石平台支架 jQuery 1.8中,当你使用CSS属性在css()或animate()中,我们将根据浏览器自动加上前缀 ...
- pat 甲级 1034 ( Head of a Gang )
1034 Head of a Gang (30 分) One way that the police finds the head of a gang is to check people's pho ...
- 51 Nod 1110距离之和最小V3
1110 距离之和最小 V3 1 秒 131,072 KB 40 分 4 级题 X轴上有N个点,每个点除了包括一个位置数据X[i],还包括一个权值W[i].点P到点P[i]的带权距离 = 实际距离 * ...
- 深度解析 Qt 中动态链接库
本文介绍的是Qt 中动态链接库,现在有些软件有自动升级功能,有些就是下载新的DLL文件,替换原来的动态链接库,MFC好象也有类似机制,Qt还有一种方式,就是把一个QWidget子类,编译成动态链接库. ...
- Java中<? extends T>和<? super T>的理解
? 通配符类型 - <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类; <? super T> 表示类型下界(Java Core中叫超类型限 ...
- LC 216. Combination Sum III
Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...
- 用第三方工具类,将JavaBean、List、Map<String,Object>转成JSON文本
导入第三方jar包: >commons-beanutils-1.7.0.jar >commons-collections-3.1.jar >commons-lang-2.5.jar ...