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

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

CrazyPanda发表于:2024-01-04 23:13:25浏览:316次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】ThinkPHP 资源路由的简单使用,restfull风格API
一、资源控制器资源控制器可以轻松的创建RESTFul资源控制器,可以通过命令行生成需要的资源控制器,例如生成index应用的TestR资源控制器使用:php&nbsp;think&nbsp;make:controller&nbsp;index@TestR #&nbsp;php&nbsp;think&nbsp;make:controller&nbsp;应用名@资源控制名或者使用完整的命名空间生成php&nbsp;think&nbsp;make:controller&nbsp;app\index\c
发表于:2024-05-24 浏览:256 TAG:
【PHP】php8为什么性能高
hp8性能高的原因:php8引入了JIT编译器、优化了函数调用、数组操作、引入了新的数据结构和算法,并修复和优化了一些内部实现细节等等。详细介绍:1、引入了Just-In-Time(JIT)编译器,JIT编译器是一种动态编译技术,它将PHP代码转换为机器码,以便更高效地执行;2、优化了函数调用,在PHP8中,通过引入函数调用的内联缓存(IC)机制,可以避免昂贵的开销等等。本教程操作系统:windows10系统、PHP8版本、Dell G3电脑。PHP是一种广泛使用的服务器端脚本语言,用于开发W
发表于:2023-12-30 浏览:321 TAG:
【PHP】什么是微服务架构
随着互联网的不断发展,越来越多的网站和应用程序应运而生。而对于开发者来说,如何快速高效地构建应用程序,是一个重要的挑战。其中,微服务架构已经成为了一个越来越受欢迎的解决方案。而php作为一种最受欢迎的web开发语言之一,也已经成为了很多开发者在构建微服务架构时的首选语言。本文将为大家介绍PHP如何应用于微服务架构,帮助大家更好地理解微服务架构以及如何使用PHP构建高效的微服务应用程序。什么是微服务架构?微服务架构(Microservices Architecture)是一种构建分布式应用程序的软
发表于:2024-05-23 浏览:294 TAG:
【PHP】阿里云 Composer 全量镜像
本镜像与 Packagist 官方实时同步,推荐使用最新的 Composer 版本。最新版本: 2.6.6下载地址: https://mirrors.aliyun.com/composer/composer.phar最后更新官方:2023-12-27 10:32:04阿里:2023-12-27 10:32:5652 秒内完成同步缓存刷新26 秒后刷新全国 CDN 缓存今日更新依赖: 1,237版本: 155,109总量统计依赖: 441,494版本: 4,950,482官方错误Package 无
发表于:2023-12-27 浏览:334 TAG:
【PHP】PHP 8.3 大升级:20 个新特性全面解析
PHP 8.3 是流行的服务器端脚本语言的最新版本,带来了许多新功能和改进,旨在简化 Web 开发并提高性能。这些增强功能包括只读类、新函数 json_validate() 、Randomizer 类的扩展以及更合适的日期/时间异常。它们将彻底改变 PHP 开发体验,使其更加高效、安全,以满足 Web 开发人员和企业的需求。1. Readonly 类改进PHP 8.3 对只读类进行了重大改进,使开发人员能够更灵活地控制其代码。其中一个显著的变化是允许在克隆时重新初始化只读属性,解决了特
发表于:2023-12-04 浏览:556 TAG:
【PHP】ThinkPHP与Laravel一样吗
thinkphp和laravel是不一样的。thinkphp和laravel虽然都是php开发框架,但是有很多区别:1、渲染末班的方式不同,thinkphp用“$this-&gt;display()”的方式渲染模版,laravel使用“return view()”方法;2、laravel是一个重路由的框架,而thinkphp要有控制器方法才能正常访问。thinkphp和laravel不一样ThinkPHP是免费开源的,快速的,简单的,面向对象的轻量级PHP开发框架,ThinkPHP可以支持win
发表于:2024-07-14 浏览:299 TAG:
【PHP】PHP8 新特性 match 表达式详解
PHP8 alpha2发布了,最近引入了一个新的关键字:match, 这个关键字的作用跟switch有点类似。这个我觉得还是有点意思,match这个词也挺好看,那么它是干啥的呢?在以前我们可能会经常使用switch做值转换类的工作,类似:function&nbsp;convert($input)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;($input)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
发表于:2024-01-03 浏览:304 TAG:
【PHP】php在数组后面增加一列
在 PHP 中,要在数组后面增加一列,我们可以采用 array_push() 函数或直接赋值的方式来实现。下面我们来介绍一下这两种方法。方法一:使用 array_push() 函数array_push() 函数可将一个或多个元素添加到数组末尾,我们可以利用此函数在数组后面增加一列。具体实现的方式如下:&lt;?php //&nbsp;定义一个数组 $oldArr&nbsp;=&nbsp;array( &nbsp;&nbsp;&nbsp;&nbsp;array(&#39;name&amp;#39
发表于:2023-12-18 浏览:337 TAG:
【PHP】如何通过编写代码来加深对 PHP8 错误处理的理解
如何通过编写代码来加深对 PHP8 错误处理的理解PHP是一种非常流行的服务器端脚本语言,广泛用于开发Web应用程序。在开发过程中,错误处理是一个非常重要的主题。PHP 8引入了一些新的特性和改进,使错误处理更加强大和灵活。本文将介绍如何通过编写代码来加深对PHP 8错误处理的理解。一、了解PHP 8错误处理的基础知识在PHP 8中,错误处理机制有几个重要的部分:错误报告级别、错误抑制运算符、异常处理和自定义错误处理器。错误报告级别决定了PHP如何报告和处理错误。你可以通过在php.ini文件中
发表于:2024-01-08 浏览:337 TAG:
【PHP】ThinkPHP5.0 Restful API 开发
一、要学习什么是 RESTful API 首先我们得明白什么是REST?简单来说:REST是所有Web应用都应该遵守的架构设计指导原则。 英文全词Representational State Transfer,翻译是”表现层状态转化”。面向资源 是REST最明显的特征,对于同一个资源的一组不同的操作。资源是服务器上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。(7个HTTP方法:GET
发表于:2024-05-24 浏览:249 TAG: