thinkphp5中是怎么自定义全局异常
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"thinkphp5中是怎么自定义全局异常",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"thinkphp5中是怎么自定义全局异常"吧!为了
千家信息网最后更新 2026年11月02日thinkphp5中是怎么自定义全局异常
本篇内容主要讲解"thinkphp5中是怎么自定义全局异常",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"thinkphp5中是怎么自定义全局异常"吧!
为了针对书写 api 时,对各种错误返回不通的 json ,直接使用 TP5 自带的提示错误页面,对于客户端而言,明显没有任何的作用,所以需要自己来自定义全局异常。
1.创建一个全局异常的类(用于传错误信息,状态码等)
use think\Exception;class BaseException extends Exception { /** HTTP 状态码 * @var string */ public $code; /** 自定义错误码 * @var string */ public $errorCode; /** 错误信息 * @var string */ public $msg; public function __construct($params=[]) { if (! $params) { return ; } // 如果传了 code if ($array_key_exists('code', $code) { $this->code = $code; } // 如果传了 errorCode if (array_key_exists('errorCode', $params)) { $this->errorCode = $params['errorCode']; } // 如果传了 msg if (array_key_exists('msg', $params)) { $this->msg = $params['msg']; } }}这样就可以给以传不通的状态码,错误信息和自定义错误码。
2. 创建一个错误处理类
错误处理类,继承于TP5自带的错误处理类,重写该 render 方法,就可以自定义错误。
use Exception;use think\exception\Handle;use think\Request;class ExceptionHandle extends Handle { /** 状态码 * @var */ private $code; /** 自定义错误码 * @var */ private $errorCode; /** 错误信息 * @var */ private $msg; /** 重写 Handle 方法里的Render * @param Exception $e * @return \think\response\Json */ // 注意这里是基类 Exception public function render(Exception $e) { if ($e instanceof BaseException) { //如果是自定义异常,则控制http状态码,不需要记录日志 //因为这些通常是因为客户端传递参数错误或者是用户请求造成的异常 //不应当记录日志 $this->msg = $e->msg; $this->code = $e->code; $this->errorCode = $e->errorCode; } else { // 如果是服务器未处理的异常,将http状态码设置为500,并记录日志 if (config('app_debug')) { // 调试状态下需要显示TP默认的异常页面,因为TP的默认页面 // 很容易看出问题 return parent::render($e); } $this->code = 500; $this->msg = '服务器内部错误,不想告诉你'; $this->errorCode = 999; $this->recordErrorLog($e); } $request = Request::instance(); $result = [ 'msg' => $this->msg, 'errorCode' => $this->errorCode, 'request_url' => $request->url() ]; return json($result, $this->code); } /** 错误日志处理 * 这里把config里日志配置的type改为test * @param Exception $e */ private function recordErrorLog(Exception $e) { // 开启日志 Log::init([ 'type' => 'File', 'path' => LOG_PATH, 'level' => ['error'] ]); // 日志记录方法 Log::record($e->getMessage(),'error'); } }3.修改配置config
// 异常处理handle类 留空使用 \think\exception\Handle 'exception_handle' => 'app\lib\exception\ExceptionHandle', // 关闭日志 'log' => [ // 日志记录方式,内置 file socket 支持扩展 // 关闭自动记录日志,请将type设置为test 'type' => 'test', // 日志保存目录 'path' => __DIR__.'/../log/', // 日志记录级别 'level' => ['sql'], ],
4.使用错误类的方法
// 这里随便创建一个userControlelrclass UserController extends Controller { use app\api\model\User; /** * 根据 id 获取某个用户 */ public function getUser($id) { $user = User::get($id); // 如果 $user 为空 抛出自定义的错误,下面有... if(! $user) { throw UserMissException(); } return json($user); }}自定义的错误子类
// 上面第一节,写的 Base 错误类派上用场了。 class UserMissException extends BaseException{ /** HTTP 状态码 * @var string */ public $code = '404'; /** 自定义错误码 * @var string */ public $errorCode = '40000'; /** 错误信息 * @var string */ public $msg = '请求的用户不存在';}请求这个 getUser 方法,报错~ 就会显示
{ "msg": "请求的用户不存在", "errorCode": "40000", "request_url": "/api/v1/user/10"}其他的错误类型,也就可以继续创建异常子类,定义这些错误属性。
到此,相信大家对"thinkphp5中是怎么自定义全局异常"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
错误
日志
状态
方法
处理
全局
信息
用户
页面
内容
子类
客户
客户端
服务器
学习
服务
配置
实用
明显
更深
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技互联网
互联网科技企业
什么是科技互联网
互联网科技巨头监管
互联网属科技
科技互联网政务服务
科技企业和互联网企业
美国互联网科技巨头监管
互联网最新的科技有限公司
重庆互联网络科技
上海互联网科技有限公司
互联网科技视频
互联网科技生活的内容
互联网巨头投资的硬核科技
浙南科技城互联网大厦招聘
神州科技互联网有限公司
北京军民互联网科技公司
互联网科技大会大佬
东风日产互联网科技公司叫什么
颐高云石互联网科技
科技互联网项目
鸠鸠互联网科技
互联网科技公司税收优惠
互联网下的科技发展
互联网科技股票
互联网 科技馆
玖二柒互联网科技公司待遇
苏州铭阳互联网科技有限公司
开一家科技互联网公司需要多少钱
北京瑞云互联网科技有限公司