【PHP】Thinkphp8 配置异常全局捕捉处理
CrazyPanda发表于:2024-01-04 23:13:25浏览:308次
封装异常处理
配置
先创建自己的 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); } }
效果图
本文转自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 require endroid/qr-code2、 使用builder生成器use Endro
- 【PHP】PHP获取毫秒值的五种方式
- 在PHP中,获取毫秒值可以通过以下几种方法实现: 1. 使用`microtime()`函数: `microtime()`函数返回当前的Unix时间戳和微秒数。我们可以通过以下代码获取毫秒值:
- 【PHP】php 二维数组删除
- 在PHP中,删除二维数组通常需要通过使用循环和条件语句来实现。在实际编程中,我们通常会遇到以下两种情况需要删除二维数组:删除指定元素:需要找到要删除的元素所在的子数组,并从该子数组中删除指定元素。删除整个子数组:需要找到包含要删除的子数组的父数组,并将该子数组删除。下面我们将分别介绍这两类任务的具体实现方法。方法一:删除指定元素要删除一个指定的元素,我们需要通过循环遍历所有子数组,找到包含目标元素的子数组,并将其从该子数组中删除。以下是实现该过程的代码示例:// 定义一个二维
- 【PHP】PHP8.0 match函数
- `match` 表达式是 PHP 8.0 引入的一个新的控制结构,它提供了一种简洁且更强大的方式来进行条件匹配。与 `switch` 语句相比,`match` 表达式具有以下优势:返回值:match 是一个表达式,它会返回一个值。严格比较:match 使用严格比较(===),而 switch 使用宽松比较(==)。单行语法:每个条件都必须在同一行内完成。默认值:可以使用 _ 作为默认匹配情况。基本语法$result = match ($value) { &
- 【PHP】ES在MySQL、PHP中的使用
- ES简介一个高扩展、开源的全文检索和分析引擎,它可以准实时地快速存储、搜索、分析海量的数据。全文检索是指
- 【PHP】php中?:与??运算符有什么不同?
- 在PHP 7中,有两个类似的语法结构:“??”和“?:”,它们都是用于处理条件判断和返回值的运算符。尽管它们看起来相似,但它们的作用和用法有一些区别。"?:"是三目运算符,语法格式为:$result = $test ? $test : ′ ′ ; 意思就是当test存在时(即empty($test)为false),则返回它本身,否则返回空(当然也可以返回其他,这里的空只是举个例子)。"??"是php7新引入的语法,它相当于是isset($result[‘k
- 【PHP】php7.4安装zipArchive,使用ZipArchive类的问题及解决方法
- 一、问题描述在开发过程中,有时会遇到PHP报错提示"Class ZipArchive not found",这是因为PHP的ZipArchive类没有被正确加载导致的。二、具体步骤及代码步骤1:确认环境在开始解决问题之前,我们需要确认一下当前环境是否满足使用ZipArchive类的要求。首先,我们需要检查PHP版本是否符合要求,一般来说,PHP版本需要大于等于5.2.0才能使用ZipArchive类。可以通过以下代码来检查PHP版本:<?php
- 【PHP】PHP8.1新特性大讲解之initializers初始化器
- PHP 8.1:初始化器(new in initializers)PHP 8.1 添加了一个看似很小的细节,但我认为它会对许多人产生重大的日常影响。那么这个“初始化器 RFC 中的新内容”是关于什么的?我们来看一个例子;我们都写过这样的代码:class MyStateMachine { public function __construct( &n
栏目分类全部>