广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >thinkphp5中是怎么自定义全局异常
  • 424
分享到

thinkphp5中是怎么自定义全局异常

2023-06-25 12:06:04 424人浏览 泡泡鱼
摘要

本篇内容主要讲解“thinkPHP5中是怎么自定义全局异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp5中是怎么自定义全局异常”吧!为了针对书写 api 时,对各种错误返回不通

本篇内容主要讲解“thinkPHP5中是怎么自定义全局异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp5中是怎么自定义全局异常”吧!

为了针对书写 api 时,对各种错误返回不通的 JSON ,直接使用 TP5 自带的提示错误页面,对于客户端而言,明显没有任何的作用,所以需要自己来自定义全局异常。

创建一个全局异常的类(用于传错误信息,状态码等)

use think\Exception;class BaseException extends Exception {        public $code;            public $errorCode;            public $msg;        public function __construct($params=[])    {        if (! $params) {            return ;        }                // 如果传了 code        if ($array_key_exists('code', $code) {            $this->code = $code;        }                // 如果传了 errorCode        if (array_key_exists('errorCode', $params)) {            $this->errorCode = $params['errorCode'];        }        // 如果传了 msg        if (array_key_exists('msg', $params)) {            $this->msg = $params['msg'];        }    }}

这样就可以给以传不通的状态码,错误信息和自定义错误码。

创建一个错误处理类

错误处理类,继承于TP5自带的错误处理类,重写该 render 方法,就可以自定义错误。

use Exception;use think\exception\Handle;use think\Request;class ExceptionHandle extends Handle {        private $code;        private $errorCode;        private $msg;                    // 注意这里是基类 Exception    public function render(Exception $e)     {        if ($e instanceof BaseException) {            //如果是自定义异常,则控制Http状态码,不需要记录日志            //因为这些通常是因为客户端传递参数错误或者是用户请求造成的异常            //不应当记录日志            $this->msg = $e->msg;            $this->code = $e->code;            $this->errorCode = $e->errorCode;        } else {            // 如果是服务器未处理的异常,将http状态码设置为500,并记录日志            if (config('app_debug')) {                // 调试状态下需要显示TP默认的异常页面,因为TP的默认页面                // 很容易看出问题                return parent::render($e);            }            $this->code = 500;            $this->msg = '服务器内部错误,不想告诉你';            $this->errorCode = 999;            $this->recordErrorLog($e);        }        $request = Request::instance();        $result = [            'msg' => $this->msg,            'errorCode' => $this->errorCode,            'request_url' => $request->url()        ];        return json($result, $this->code);    }            private function recordErrorLog(Exception $e)    {        // 开启日志        Log::init([            'type'  =>  'File',            'path'  =>  LOG_PATH,            'level' => ['error']        ]);                // 日志记录方法        Log::record($e->getMessage(),'error');    }    }

修改配置config

// 异常处理handle类 留空使用 \think\exception\Handle    'exception_handle'       => 'app\lib\exception\ExceptionHandle',    // 关闭日志    'log'                    => [        // 日志记录方式,内置 file Socket 支持扩展        // 关闭自动记录日志,请将type设置为test        'type'  => 'test',        // 日志保存目录        'path'  => __DIR__.'/../log/',        // 日志记录级别        'level' => ['sql'],    ],

使用错误类的方法

// 这里随便创建一个userControlelrclass UserController extends Controller {    use app\api\model\User;            public function getUser($id)    {        $user = User::get($id);                // 如果 $user 为空 抛出自定义的错误,下面有...        if(! $user) {            throw UserMissException();        }                return json($user);    }}

自定义的错误子类

// 上面第一节,写的 Base 错误类派上用场了。 class UserMissException extends BaseException{        public $code = '404';        public $errorCode = '40000';        public $msg = '请求的用户不存在';}

请求这个 getUser 方法,报错~  就会显示

{    "msg": "请求的用户不存在",    "errorCode": "40000",    "request_url": "/api/v1/user/10"}

其他的错误类型,也就可以继续创建异常子类,定义这些错误属性。

到此,相信大家对“thinkphp5中是怎么自定义全局异常”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: thinkphp5中是怎么自定义全局异常

本文链接: https://www.lsjlt.com/news/304651.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • thinkphp5中是怎么自定义全局异常
    本篇内容主要讲解“thinkphp5中是怎么自定义全局异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp5中是怎么自定义全局异常”吧!为了针对书写 api 时,对各种错误返回不通...
    99+
    2023-06-25
  • springboot实现全局异常处理及自定义异常类
    目录全局异常处理及自定义异常类全局异常处理定义一个业务异常的枚举全局异常处理配置springboot Restful使用springboot 返回 ModelAndView全局异常处...
    99+
    2022-11-13
  • springboot如何实现全局异常处理及自定义异常类
    这篇文章主要介绍springboot如何实现全局异常处理及自定义异常类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!全局异常处理及自定义异常类全局异常处理定义一个处理类,使用@ControllerAdvice注解。@...
    99+
    2023-06-29
  • java中怎么自定义异常
    在Java中,可以通过继承Exception类或其子类来自定义异常。以下是一些自定义异常的示例: // 自定义一个异常类 class...
    99+
    2023-10-30
    java
  • vue中怎么自定义全局组件
    这期内容当中小编将会给大家带来有关vue中怎么自定义全局组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Vue.use( plugin ):安装 Vue.js 插件。如...
    99+
    2022-10-19
  • Vue.use中怎么自定义全局组件
    本篇文章给大家分享的是有关Vue.use中怎么自定义全局组件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先看下目前的项目结构:webpac...
    99+
    2022-10-19
  • Java异常怎么自定义
    这篇文章主要介绍“Java异常怎么自定义”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java异常怎么自定义”文章能帮助大家解决问题。异常方法//返回此可抛出对象的详细信息消息字符串public&n...
    99+
    2023-07-05
  • Java中怎么自定义异常类
    Java中怎么自定义异常类,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。自定义异常:步骤 ­一:创建一个类继承于Throwable或其子类;二:添加构造方法...
    99+
    2023-06-17
  • 怎么在java中自定义异常类
    本篇文章给大家分享的是有关怎么在java中自定义异常类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Andro...
    99+
    2023-06-14
  • 怎么在python中自定义异常类
    这篇文章将为大家详细讲解有关怎么在python中自定义异常类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对...
    99+
    2023-06-14
  • java怎么抛出自定义异常
    在Java中,可以通过自定义一个类,并继承Exception或RuntimeException类来创建自定义异常。 下面是一个示例代...
    99+
    2023-10-21
    java
  • python用户怎么自定义异常
    本篇内容主要讲解“python用户怎么自定义异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python用户怎么自定义异常”吧!说明程序可以通过创建一个新的异常类来命名它们自己的异常。异常应该...
    99+
    2023-06-20
  • JAVA在项目中怎么自定义异常
    这篇文章主要讲解了“JAVA在项目中怎么自定义异常”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JAVA在项目中怎么自定义异常”吧!JAVA项目中自定义异常1.数据返回处理类@Datapub...
    99+
    2023-06-20
  • PHP中怎么自定义异常处理器
    本篇文章为大家展示了PHP中怎么自定义异常处理器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、异常类的层级关系:class NotFoundException extends...
    99+
    2023-06-17
  • Spring Boot 中自定义异常怎么处理
    这篇文章将为大家详细讲解有关Spring Boot 中自定义异常怎么处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @Co...
    99+
    2023-06-02
  • python自定义异常是什么意思
    本篇内容介绍了“python自定义异常是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明因为错误是class,捕获错误是捕获cla...
    99+
    2023-06-20
  • python怎么实现自定义异常类
    本篇内容介绍了“python怎么实现自定义异常类”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明通常可以继承Exception或子类。命名...
    99+
    2023-06-30
  • Java中的异常类怎么实现自定义
    Java中的异常类怎么实现自定义?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java自定义异常类的实例详解为什么要自己编写异常类?假如jdk里面没有提供的异常...
    99+
    2023-05-31
    java ava
  • 自定义vue全局组件use、vuex怎么用
    这篇文章主要介绍了自定义vue全局组件use、vuex怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。自定义vue全局组件use使用(解...
    99+
    2022-10-19
  • nodejs中怎么定义全局变量
    本篇内容主要讲解“nodejs中怎么定义全局变量”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nodejs中怎么定义全局变量”吧! ...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作