当前位置: 首页 > news >正文

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');}
}
http://www.lryc.cn/news/470296.html

相关文章:

  • python查询并安装项目所依赖的所有包
  • istio多主集群架构验证方法
  • Java全栈经典面试题剖析8】JavaSE高级 -- 线程同步、 线程通信、死锁、线程池
  • linux 驱动, struct file , struct node, private_data
  • ubuntu 硬盘扩容
  • cm211-1刷机教程镜像包
  • Android 15自定义设置导航栏与状态栏,EdgeToEdge适配
  • 设计模式概览
  • 力扣每日一题打卡 684. 冗余连接
  • 什么是微服务中的反应性扩展?
  • 【MyBatis】MyBatis-config标签详解
  • 使用AVPlayer进行音频播放开发基础设计
  • API网关的作用--为什么微服务需要一个API网关?
  • [0154].第5节:IDEA中创建Java Web工程
  • React03 组件 Props
  • 多线程——线程安全的集合类
  • 自动化数据库管理:如何通过存储过程动态创建 MySQL 对象
  • 480p 720p 1080p 2k 4k 8k 12k分辨率视频分别占用多大带宽?
  • unity中GameObject介绍
  • 洛谷——P8468 [Aya Round 1 C] 文文的构造游戏(01构造问题)
  • 双击热备和负载均衡的区别
  • 如何使用 cPanel 部署 WordPress临时网站
  • Android 自定义 Dialog 实现列表 单选,多选,搜索
  • 下载地址合辑(持续更新)
  • Android Kotlin 高阶函数详解及其在协程中的应用
  • CSS基础—网页布局(重点!)
  • 【Fargo】17:vs工程转qt构建:QT6 不支持32bit转向qt5.15.2
  • ​智能电表蓝牙芯片方案
  • miRNA分析流程学习(一)/TCGAmiRNA数据下载
  • 西南大学软件专硕考研难度分析!