在项目的开发过程中异常抛出尤为重要不仅能够做出友好提示帮助掩盖我们伟大的程序员们尴尬的瞬间,还能做到提示开发人员代码白编写的错误,下面进行自定义异常抛出类,纯属个人理解,希望大家指正

首先在框架中我们可以自定义目录结构用来做异常类的存储位置例如文件目录为以下红框中

定义目录结构后阐述一下我理解的异常类的工作流程,见名知意既然是异常抛出那么只有在代码出现问题的时候或者是逻辑出现异常的时候会进行抛出,那么我认为这就会出现两种情况,

第一种是用户传输的参数或者用户操作的流程有问题这种情况下并不是我们的开发的代码或者是业务逻辑出现的致命错误,直白的将这种情况就是用户的请求没有返回相应的数据

第二种是我们的代码存在问题,或者是服务器上面的问题,但是这个问题我们是不需要用户知道的,在这种情况下我们即需要给出用户的友好提示,还需要知道我们的代码具体是哪里出现了问题所以这种情况下我们就需要记录日志

分析了两种情况之后首先创建应对第一种情况的类,命名为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 自定义异常处理类的更多相关文章

  1. springmvc自定义异常处理类和<mvc:annotation-driven/>自带异常处理优先级问题

    自定义异常类的优先级低于注解驱动的默认异常处理,所以可以给自定义异常处理类,实现一个排序的接口, org.springframework.core.Ordered 改接口的注释: /**  * {@c ...

  2. Asp.net MVC 自定义异常处理类

    using ElegantWM.Common; using System; using System.Collections.Generic; using System.Linq; using Sys ...

  3. SpringBoot系列教程web篇之自定义异常处理HandlerExceptionResolver

    关于Web应用的全局异常处理,上一篇介绍了ControllerAdvice结合@ExceptionHandler的方式来实现web应用的全局异常管理: 本篇博文则带来另外一种并不常见的使用方式,通过实 ...

  4. Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志

    在使用SimpleMappingExceptionResolver实现统一异常处理后(参考Spring MVC的异常统一处理方法), 发现出现异常时,log4j无法在控制台输出错误日志.因此需要自定义 ...

  5. thinkphp5底层基类封装、内部类函数

    记录下thinkphp5自定义底层基类.内部类函数使用笔记 大部分笔记来自tp手册. 底层常用代码的封装 在控制器中基类的起着至关重要的作用,整个项目的代码安全,复杂程度,易读性都要看你项目的基类架构 ...

  6. php 异常处理类

    PHP具有很多异常处理类,其中Exception是所有异常处理的基类. Exception具有几个基本属性与方法,其中包括了: message 异常消息内容code 异常代码file 抛出异常的文件名 ...

  7. 扩展PHP内置的异常处理类

    在try代码块中,需要使用throw语句抛出一个异常对象,才能跳到转到catch代码块中执行,并在catch代码块中捕获并使用这个异常类的对象.虽然在PHP中提供的内置异常处理类Exception,已 ...

  8. 【Flask】abort和errorhandler、app_errorhandler进行请求中断及自定义异常处理

    在view函数中,如果需要中断request,可以使用abort(500)或者直接raise exception.当然我们还需要返回一个出错信息给前端,所以需要定制一下ErrorHandler.一般只 ...

  9. ASP.NET MVC自定义异常处理

    1.自定义异常处理过滤器类文件 新建MyExceptionAttribute.cs异常处理类文件

随机推荐

  1. Qt 模型/视图结构

    MVC是一种与用户界面相关的设计模式.通过使用此模型,可以有效地分离数据和用户界面.MVC设计模式包含三要素:表示数据的模型(Model).表示用户界面的视图(View)和定义了用户在界面上的操作控制 ...

  2. kafka接口文档和kafka教程

    http://kafka.apache.org/090/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html ...

  3. [Functional Programming] Reader with Async ADT

    ReaderT is a Monad Transformer that wraps a given Monad with a Reader. This allows the interface of ...

  4. i3wm脚本

    exec 执行命令 --no-startup-id 有些脚本或者程序不支持启动通知,不加命令,鼠标会长时间空转,60秒左右 exec_always 每次重启i3,使用该命令启动的程序都会重新执行一次, ...

  5. 洛谷P4979 矿洞:坍塌

    洛谷题目链接 珂朵莉树吼啊!!! 又是一道水题,美滋滋~~~ $A$操作完全模板区间赋值 $B$操作也是一个模板查询,具体看代码 注意:读入不要用$cin$,会$T$,如果你是大佬,会玄学东西当我没说 ...

  6. ACM之路(14)—— 线段树的日常(上)

    我的线段树简直有毒,各种错误都能忙上半天.做了kuangbin的线段树专题的一半,还有一半留到以后去做. 链接:http://acm.hust.edu.cn/vjudge/contest/view.a ...

  7. 02 Anaconda的介绍,安装记以及使用

    目录 〇.序 Python是一种面向对象的解释型计算机程序设计语言,其使用,具有跨平台的特点,可以在Linux.macOS以及Windows系统中搭建环境并使用,其编写的代码在不同平台上运行时,几乎不 ...

  8. JS基础_垃圾回收(GC)

    垃圾回收(GC) 程序运行过程中也会产生垃圾,这些垃圾积攒过多以后,会导致程序运行的速度过慢,所以我门需要一个垃圾回收的机制,来处理程序运行过程中产生的垃圾 当一个对象没有任何的变量或属性对它进行引用 ...

  9. redis 字符串数据(string)

    Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下: 语法 redis 127.0.0.1:6379> COMMAND KEY_NAME 实例 redis 127. ...

  10. Python 文件writelines() 方法和处理双层列表

    概述 writelines() 方法用于向文件中写入一序列的字符串. 这一序列字符串可以是由迭代对象产生的,如一个字符串列表. 换行需要制定换行符 \n. 语法 writelines() 方法语法如下 ...