您的当前位置:首页>全部文章>文章详情

【PHP】Thinkphp8 配置异常全局捕捉处理

CrazyPanda发表于:2024-01-04 23:13:25浏览:308次TAG:

封装异常处理

配置

先创建自己的 BaseException 类
<?php

namespace app\exception;

use app\enums\StatusCodeEnum;

class BaseException extends \Exception
{
    public $success = false;
    public $status = 1;
    public $statusInfo = [
        "message" => "服务器正忙",
    ];
    // 这里是我自己设置的一个状态码类,StatusCodeEnum::INTERNAL_SERVER_ERROR = 500
    public $httpStatus = StatusCodeEnum::INTERNAL_SERVER_ERROR;
    public function __construct($message = "", $code = 0, $httpStatus = 500)
    {
        if (!is_numeric($code)) {
            $code = 0;
        }
        if (!is_numeric($httpStatus)) {
            $httpStatus = 500;
        }
        $this->httpStatus = $httpStatus;
        $this->status = $code;
        $this->statusInfo = [
            "message" => $message,
        ];
        parent::__construct($message, $code);
    }
    // 这里也可以写在公共方法中脱离出来
    public function getError()
    {
        return [
            "success" => $this->success,
            "status" => $this->status,
            "statusInfo" => $this->statusInfo,
        ];
    }
}
再写一个类进行继承这个类

没有需要不用修改任何东西,继承的父类已经够用了

<?php

namespace app\exception\AppException;

use app\exception\BaseException;
// 我这个是一个参数报错异常
class ParameterException extends BaseException
{

}

使用

在UserMiddle中间件中使用
<?php

namespace app\middleware;

// 以上代码省略。。。。。。

class UserMiddle
{

    public function handle($request, \Closure $next)
    {

        // 获取请求参数
        $params = $request->param();

        try {
            // 验证用户信息,指定验证类为UserValidate,验证场景为login,并检查参数是否通过验证
            validate(UserValidate::class)->scene("login")->check($params);
        } catch (ValidateException $e) {
            // 验证失败,抛出异常,返回错误信息
			// 在这里抛出我们自己配置的类,不写参数会有默认的参数
            throw new ParameterException($e->getMessage(), 1,500);
        }

        return $next($request);
    }
}
配置ExceptionHandle类异常处理
<?php
namespace app;

// 以上代码省略。。。。。。

/**
 * 应用异常处理类
 */
class ExceptionHandle extends Handle
{
    // 以上代码省略。。。。。。
    public function render($request, Throwable $e): Response
    {
        // 添加自定义异常处理机制,判断类型,自己可以灵活搭配
        if($e instanceof ParameterException){
            return json($e->getError(),$e->httpStatus);
        }

        // 其他错误交给系统处理
        return parent::render($request, $e);
    }
}
效果图

1.png


本文转自Thinkphp8 配置异常全局捕捉处理-CSDN博客如有侵权可联系删除


猜你喜欢

【PHP】TP使用endroid/qr-code生成二维码
前言TP版本:TP6.0Packagist 传送地址: https://packagist.org/packages/endroid/qr-code使用前需要检查下是否启用了 gd2 扩展,对于 endroid/qr-code 版本选择,参考扩展包文档对 PHP 版本的要求1、 安装扩展执行 composer 命令安装 endroid/qr-code 扩展composer&nbsp;require&nbsp;endroid/qr-code2、 使用builder生成器use&nbsp;Endro
发表于:2024-03-08 浏览:348 TAG:
【PHP】PHP获取毫秒值的五种方式
在PHP中,获取毫秒值可以通过以下几种方法实现: 1. 使用`microtime()`函数:    `microtime()`函数返回当前的Unix时间戳和微秒数。我们可以通过以下代码获取毫秒值:
发表于:2024-11-12 浏览:222 TAG: #php
【PHP】php 二维数组删除
在PHP中,删除二维数组通常需要通过使用循环和条件语句来实现。在实际编程中,我们通常会遇到以下两种情况需要删除二维数组:删除指定元素:需要找到要删除的元素所在的子数组,并从该子数组中删除指定元素。删除整个子数组:需要找到包含要删除的子数组的父数组,并将该子数组删除。下面我们将分别介绍这两类任务的具体实现方法。方法一:删除指定元素要删除一个指定的元素,我们需要通过循环遍历所有子数组,找到包含目标元素的子数组,并将其从该子数组中删除。以下是实现该过程的代码示例://&nbsp;定义一个二维
发表于:2023-12-20 浏览:319 TAG:
【PHP】PHP8.0 match函数
`match` 表达式是 PHP 8.0 引入的一个新的控制结构,它提供了一种简洁且更强大的方式来进行条件匹配。与 `switch` 语句相比,`match` 表达式具有以下优势:返回值:match 是一个表达式,它会返回一个值。严格比较:match 使用严格比较(===),而 switch 使用宽松比较(==)。单行语法:每个条件都必须在同一行内完成。默认值:可以使用 _ 作为默认匹配情况。基本语法$result&nbsp;=&nbsp;match&nbsp;($value)&nbsp;{ &amp;
发表于:2024-08-07 浏览:256 TAG:
【PHP】ES在MySQL、PHP中的使用
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ES简介一个高扩展、开源的全文检索和分析引擎,它可以准实时地快速存储、搜索、分析海量的数据。全文检索是指
发表于:2024-06-15 浏览:208 TAG:
【PHP】php中?:与??运算符有什么不同?
在PHP 7中,有两个类似的语法结构:“??”和“?:”,它们都是用于处理条件判断和返回值的运算符。尽管它们看起来相似,但它们的作用和用法有一些区别。&quot;?:&quot;是三目运算符,语法格式为:$result = $test ? $test : ′ ′ ; 意思就是当test存在时(即empty($test)为false),则返回它本身,否则返回空(当然也可以返回其他,这里的空只是举个例子)。&quot;??&quot;是php7新引入的语法,它相当于是isset($result[‘k
发表于:2024-08-01 浏览:272 TAG:
【PHP】php7.4安装zipArchive,使用ZipArchive类的问题及解决方法
一、问题描述在开发过程中,有时会遇到PHP报错提示&quot;Class ZipArchive not found&quot;,这是因为PHP的ZipArchive类没有被正确加载导致的。二、具体步骤及代码步骤1:确认环境在开始解决问题之前,我们需要确认一下当前环境是否满足使用ZipArchive类的要求。首先,我们需要检查PHP版本是否符合要求,一般来说,PHP版本需要大于等于5.2.0才能使用ZipArchive类。可以通过以下代码来检查PHP版本:&lt;?php &nbsp;&nbsp;
发表于:2024-01-31 浏览:333 TAG:
【PHP】PHP8.1新特性大讲解之initializers初始化器
PHP 8.1:初始化器(new in initializers)PHP 8.1 添加了一个看似很小的细节,但我认为它会对许多人产生重大的日常影响。那么这个“初始化器 RFC 中的新内容”是关于什么的?我们来看一个例子;我们都写过这样的代码:class&nbsp;MyStateMachine { &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;n
发表于:2024-01-04 浏览:307 TAG:
【PHP】PHP 框架中大型项目代码维护挑战与解决方法
在大型 php 项目中,代码维护面临主要挑战,包括依赖管理、代码重构、代码风格和文档。解决方法包括:使用依赖项管理器管理版本冲突。使用unittest框架在重构时保持代码完整性。建立并强制执行代码风格指南。建立文档策略并使用phpdoc生成文档。PHP 框架中大型项目代码维护挑战与解决方法在大型 PHP 项目中,代码维护可能是一个艰巨的任务。随着项目规模的增长,代码库会变得庞大且复杂,从而难以管理和更新。以下是 PHP 框架中代码维护面临的主要挑战以及解决这些挑战的一些方法:挑战 1:依赖管理依
发表于:2024-05-30 浏览:272 TAG:
【PHP】PHP Websocket开发指南,实现实时交通信息查询功能
PHP Websocket开发指南,实现实时交通信息查询功能前言Websocket是一种在Web上实现双向通信的技术,它能够实现实时更新数据,适用于需要实时交互的场景。本篇文章将介绍如何使用PHP开发一个实时交通信息查询的功能,并提供相应的代码示例。准备工作在开始开发之前,需要准备以下工作:一台安装了PHP和Apache服务器的主机,具备基础的PHP编程知识一个支持Websocket的浏览器,如Chrome、Firefox等安装Composer,用于安装相关依赖库开始开发3.1 安装W
发表于:2023-12-04 浏览:577 TAG: