10. 异常处理器
一、通过 注解 注册异常处理器
<?php
namespace App\Exception\Handler;use App\Exception\FooException;
use Hyperf\ExceptionHandler\ExceptionHandler;
use Hyperf\HttpMessage\Stream\SwooleStream;
use Swow\Psr7\Message\ResponsePlusInterface;
use Throwable;use Hyperf\ExceptionHandler\Annotation\ExceptionHandler as RegisterHandler;// Hyperf\ExceptionHandler\Annotation\ExceptionHandler 注解 取别名 RegisterHandler
#[RegisterHandler(server: 'http')]
class FooExceptionHandler extends ExceptionHandler
{public function handle(Throwable $throwable, ResponsePlusInterface $response){echo '异常被执行了';return $response->withStatus(501)->withBody(new SwooleStream('This is FooExceptionHandler'));}public function isValid(Throwable $throwable): bool{// isValid为true时,执行 handle方法return $throwable instanceof FooException;}
}
二、通过配置文件注册异常处理器
定义配置文件
- config/autoload/exception.php
<?phpreturn ['handler' => ['http' => [App\Exception\Handler\FooExceptionHandler::class, // 新增配置项Hyperf\HttpServer\Exception\Handler\HttpExceptionHandler::class,App\Exception\Handler\AppExceptionHandler::class,],],
];
定义异常处理器
- app/Exception/Handler/FooExceptionHandler
<?php
namespace App\Exception\Handler;use App\Exception\FooException;
use Hyperf\ExceptionHandler\ExceptionHandler;
use Hyperf\HttpMessage\Stream\SwooleStream;
use Swow\Psr7\Message\ResponsePlusInterface;
use Throwable;class FooExceptionHandler extends ExceptionHandler
{public function handle(Throwable $throwable, ResponsePlusInterface $response){$this->stopPropagation(); // 调用该方法,异常不再往后传递echo '异常被执行了';return $response->withStatus(501)->withBody(new SwooleStream('This is FooExceptionHandler'));}public function isValid(Throwable $throwable): bool{// isValid为true时,执行 handle方法return $throwable instanceof FooException;}
}
定义异常类
- app/Exception/FooException
<?phpnamespace App\Exception;class FooException extends \RuntimeException
{}
三、触发异常(调用控制器方法)
<?phpnamespace App\Controller;use App\Exception\FooException;
use Hyperf\HttpServer\Annotation\AutoController;#[AutoController]
class TestController
{public function exception(){throw new FooException('test');}
}
相关文章:
10. 异常处理器
一、通过 注解 注册异常处理器 <?php namespace App\Exception\Handler;use App\Exception\FooException; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use Swow\Psr7\Message\ResponsePlusInterface; use Throwable;use…...
python查询并安装项目所依赖的所有包
引言 如果需要进行代码的移植,肯定少不了在另一台pc或者服务器上进行环境的搭建,那么首先是要知道在已有的工程的代码中用到了哪些包,此时,如果是用人工去一个一个的代码文件中去查看调用了哪些包,这个工作甚是繁琐。…...
istio多主集群架构验证方法
istio单网格多集群架构搭建完成后,需要验证下当前集群是否可以发现对端集群,验证方法如下: 命名空间建议设置为:demo-dubbo deploy.yaml apiVersion: apps/v1 kind: Deployment metadata:finalizers:- kubebuilder.io/net.traf…...
Java全栈经典面试题剖析8】JavaSE高级 -- 线程同步、 线程通信、死锁、线程池
目录 面试题3.44 多线程的同步方式 面试题3.45 多线程安全问题怎么解决 面试题3.46 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 面试题3.47 简述synchronized与java.util.concurrent.locks.Lock的异同ÿ…...
linux 驱动, struct file , struct node, private_data
首先是关于什么是 praviate_data : 来看看正点原子是怎么使用的。 网上找的一些资料: 总结一下: 1 私有数据 是 struct file特有的。 2private_data 可以自己随便设置。 3 一般是在 open 函数中设置好,然后在 read, write 函…...
ubuntu 硬盘扩容
在 Linux 中,可以使用以下命令查看磁盘的使用情况和信息: 查看磁盘使用情况: df -h这个命令会显示所有文件系统的使用情况,以人类可读的格式(例如 GB 或 MB)。 查看磁盘分区和设备信息: lsblk这…...
cm211-1刷机教程镜像包
cm211-1刷机教程 包含镜像包酷看桌面 s905l3-l3b通用 镜像包:https://www.123684.com/s/WGAwjv-5tlv3 1.刷机教程 镜像为线刷镜像包,需要短接刷机 短接刷机,导入镜像包 开始即可。到100%就证明可以了。...
Android 15自定义设置导航栏与状态栏,EdgeToEdge适配
背景:android api 35,activity设置EdgeToEdge.enable((ComponentActivity) this)前提下 一、设置导航栏与状态栏颜色 设置的状态栏颜色,只需要设置fitsSystemWindows跟setOnApplyWindowInsetsListener xml设置: 代码:…...
设计模式概览
设计模式是一种在软件设计中被广泛使用的解决方案,旨在提高软件的可重用性、可维护性和可扩展性。设计模式可以分为三大类:创建型、结构型和行为型。 1、创建型模式 这些模式主要关注对象的创建过程,提供了不同的方式来创建对象,…...
力扣每日一题打卡 684. 冗余连接
树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1~n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges ,edges[i] …...
什么是微服务中的反应性扩展?
大家好,我是锋哥。今天分享关于【什么是微服务中的反应性扩展?】面试题?希望对大家有帮助; 什么是微服务中的反应性扩展? Reactive Extensions 也称为 Rx。这是一种设计方法,我们通过调用多个服务来收集结果…...
【MyBatis】MyBatis-config标签详解
目录 MyBatis配置文件标签详解configuration标签properties标签typeAliases标签environments标签environment标签transactionManager标签dataSource标签mappers标签 MyBatis配置文件标签详解 我们在使用MyBatis框架的时候需要一个配置文件——MyBatis-config.xml来告诉MyBatis…...
使用AVPlayer进行音频播放开发基础设计
在使用AvPlayer进行设计之前,需要获取相应对象,后期围绕该对象展开操作 const player await media.createAVPlayer() 然后对播放器进行初始化设置: player.on(stateChange, (state) > {switch (state) {case initialized:player.prepar…...
API网关的作用--为什么微服务需要一个API网关?
微服务网关核心作用就是协议转换、安全隔离和流量控制 微服务架构中,API网关作为系统的入口点,可以统一处理所有客户端请求。 1)协议转换:它能够支持多种通信协议(如HTTP、gRPC等)之间的相互转换ÿ…...
[0154].第5节:IDEA中创建Java Web工程
我的后端学习大纲 IDEA大纲 1.1.IDEA中配置Tomcat: 1.找打setting: 2.配置Tomcat Server的位置: 3.这里配置Tomcat的名称以及配置应用服务器的位置。根据自己Tomcat的安装位置决定 4.配置好后,如下图所示 1.2.创建Web工程: 1.建…...
React03 组件 Props
组件 & Props React 组件函数( Function )组件类( Class )组件 Props将 props 传递给子组件在子组件中读取 props给 prop 指定一个默认值使用 JSX 展开语法传递 props React 组件 组件本质上就是类和函数,但是与常…...
多线程——线程安全的集合类
目录 前言 一、多线程环境使用 ArrayList 1.进行加锁 2.使用 SynchronizedList 类 3.使用 CopyOnWriteArrayList 类 二、多线程环境使用队列 1.进行加锁 2.使用阻塞队列 三、多线程环境使用哈希表 1.Hashtable 2.ConcurrentHashMap (1)缩小锁…...
自动化数据库管理:如何通过存储过程动态创建 MySQL 对象
在当今数据驱动的世界中,高效的数据库管理至关重要。本文将展示如何通过存储过程自动化地创建各种 MySQL 数据库对象,包括数据表、视图、字段、索引、约束、存储过程、定时器和事件。通过这些方法,我们可以快速响应业务需求,提高数…...
480p 720p 1080p 2k 4k 8k 12k分辨率视频分别占用多大带宽?
技术背景 好多开发者,在设置视频编码参数的时候,对不同分辨率的带宽设置,缺乏相关的经验,实际上,视频分辨率与所需带宽之间的关系受到多个因素的影响,包括视频编码方式、帧率、视频内容的动态程度等。下面…...
unity中GameObject介绍
在 Unity 中,Cube和Sphere等基本几何体是 Unity 引擎的内置预制体(Prefabs),它们属于 Unity 中的GameObject 系统,可以在 Unity 的 Hierarchy 视图或 Scene 视图中右键点击,然后在弹出的菜单中选择 3D Obje…...
智能手机如何重塑芯片市场:从基带到SoC的平台化竞争
1. 市场格局的剧变:一部智能手机如何重塑芯片江湖如果你在2007年问一个半导体行业的从业者,手机核心芯片市场的格局会怎样,他大概率会给你描绘一个由德州仪器、飞思卡尔、英飞凌等传统巨头主导的图景。然而,仅仅五年后,…...
NextPy全栈框架:用Python构建AI智能体Web应用
1. 项目概述:当AI智能体遇上全栈Web开发最近在开源社区里,一个名为dot-agent/nextpy的项目引起了我的注意。作为一名长期在Web开发和AI应用落地之间“反复横跳”的开发者,我深知将AI能力,特别是智能体(Agent࿰…...
ArcGIS标注进阶:手把手教你搞定分式标注和河流左斜体(附完整表达式)
ArcGIS标注进阶:分式标注与河流左斜体实战指南 在地图制图领域,专业标注是提升可视化效果的关键环节。许多GIS工程师在进行水文地质制图时,常遇到分式标注格式混乱、河流名称无法实现标准左斜体等痛点问题。本文将彻底解决这些标注难题&#…...
在Python项目中实现通过Taotoken轮询调用多个大模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Python项目中实现通过Taotoken轮询调用多个大模型 基础教程类,面向中高级开发者。当你在构建一个需要灵活调用不同大…...
AgentDock:构建可控AI智能体的开源框架与工程实践
1. 项目概述:构建可控的智能体应用框架如果你正在寻找一个既能利用大语言模型(LLM)的创造力,又能确保关键业务流程稳定可靠的开发框架,那么 AgentDock 的出现可能正合你意。我最近深度体验了这个开源项目,它…...
体验Taotoken聚合路由在单一模型临时故障时的自动容灾效果
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 体验Taotoken聚合路由在单一模型临时故障时的自动容灾效果 在实际的AI应用开发与集成过程中,服务的稳定性是开发者关注…...
大疆智图+B3DM切片+Cesium:5分钟搞定倾斜摄影三维模型在线发布
大疆智图B3DM切片Cesium:零代码实现倾斜摄影三维模型Web发布全指南 当无人机航拍的倾斜摄影数据需要快速在Web端展示时,技术栈的衔接往往成为最大障碍。本文将手把手带您实现从大疆智图生成B3DM切片到Cesium可视化呈现的完整流程,全程无需编写…...
HDLbits实战解析:从异步复位到同步复位,掌握三段式FSM的核心差异与设计要点
1. 异步复位与同步复位的本质区别 在数字电路设计中,复位信号就像电脑的重启按钮,它能将电路恢复到初始状态。但很多初学者第一次在HDLbits上做FSM练习题时,会被"asynchronous reset"和"synchronous reset"这两个概念搞…...
基于LLM的MBTI人格模拟对话实验:从系统设计到工程实践
1. 项目概述:当MBTI遇上AI,一次关于人格的深度对话实验最近在GitHub上看到一个挺有意思的项目,叫“Kali-Hac/ChatGPT-MBTI”。光看名字,你可能觉得这又是一个用ChatGPT玩MBTI性格测试的简单脚本。但当我真正clone下来,…...
工程师如何驾驭参考设计:从复制到创新的实战指南
1. 参考设计的双刃剑:工程师的“爱恨情仇”在电子工程这个行当里混了十几年,我发现自己对“参考设计”的感情,就像对一位能力超群但性格有点别扭的同事。你离不开他,因为他总能帮你快速搞定最棘手的难题,让你在项目截止…...
