【PHP】Thinkphp8 配置异常全局捕捉处理
CrazyPanda发表于:2024-01-04 23:13:25浏览:316次
封装异常处理
配置
先创建自己的 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】ThinkPHP 资源路由的简单使用,restfull风格API
- 一、资源控制器资源控制器可以轻松的创建RESTFul资源控制器,可以通过命令行生成需要的资源控制器,例如生成index应用的TestR资源控制器使用:php think make:controller index@TestR # php think make:controller 应用名@资源控制名或者使用完整的命名空间生成php think make:controller app\index\c
- 【PHP】php8为什么性能高
- hp8性能高的原因:php8引入了JIT编译器、优化了函数调用、数组操作、引入了新的数据结构和算法,并修复和优化了一些内部实现细节等等。详细介绍:1、引入了Just-In-Time(JIT)编译器,JIT编译器是一种动态编译技术,它将PHP代码转换为机器码,以便更高效地执行;2、优化了函数调用,在PHP8中,通过引入函数调用的内联缓存(IC)机制,可以避免昂贵的开销等等。本教程操作系统:windows10系统、PHP8版本、Dell G3电脑。PHP是一种广泛使用的服务器端脚本语言,用于开发W
- 【PHP】什么是微服务架构
- 随着互联网的不断发展,越来越多的网站和应用程序应运而生。而对于开发者来说,如何快速高效地构建应用程序,是一个重要的挑战。其中,微服务架构已经成为了一个越来越受欢迎的解决方案。而php作为一种最受欢迎的web开发语言之一,也已经成为了很多开发者在构建微服务架构时的首选语言。本文将为大家介绍PHP如何应用于微服务架构,帮助大家更好地理解微服务架构以及如何使用PHP构建高效的微服务应用程序。什么是微服务架构?微服务架构(Microservices Architecture)是一种构建分布式应用程序的软
- 【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 无
- 【PHP】PHP 8.3 大升级:20 个新特性全面解析
- PHP 8.3 是流行的服务器端脚本语言的最新版本,带来了许多新功能和改进,旨在简化 Web 开发并提高性能。这些增强功能包括只读类、新函数 json_validate() 、Randomizer 类的扩展以及更合适的日期/时间异常。它们将彻底改变 PHP 开发体验,使其更加高效、安全,以满足 Web 开发人员和企业的需求。1. Readonly 类改进PHP 8.3 对只读类进行了重大改进,使开发人员能够更灵活地控制其代码。其中一个显著的变化是允许在克隆时重新初始化只读属性,解决了特
- 【PHP】ThinkPHP与Laravel一样吗
- thinkphp和laravel是不一样的。thinkphp和laravel虽然都是php开发框架,但是有很多区别:1、渲染末班的方式不同,thinkphp用“$this->display()”的方式渲染模版,laravel使用“return view()”方法;2、laravel是一个重路由的框架,而thinkphp要有控制器方法才能正常访问。thinkphp和laravel不一样ThinkPHP是免费开源的,快速的,简单的,面向对象的轻量级PHP开发框架,ThinkPHP可以支持win
- 【PHP】PHP8 新特性 match 表达式详解
- PHP8 alpha2发布了,最近引入了一个新的关键字:match, 这个关键字的作用跟switch有点类似。这个我觉得还是有点意思,match这个词也挺好看,那么它是干啥的呢?在以前我们可能会经常使用switch做值转换类的工作,类似:function convert($input) { switch ($input) {
- 【PHP】php在数组后面增加一列
- 在 PHP 中,要在数组后面增加一列,我们可以采用 array_push() 函数或直接赋值的方式来实现。下面我们来介绍一下这两种方法。方法一:使用 array_push() 函数array_push() 函数可将一个或多个元素添加到数组末尾,我们可以利用此函数在数组后面增加一列。具体实现的方式如下:<?php // 定义一个数组 $oldArr = array( array('name&#39
栏目分类全部>