TP5接口开发之异常处理接管
前几天在开发的时候用到了第三方的扩展包,使用过程中第三方扩展包抛出了异常
因为这边是接口开发,需要返回错误代码以及提示信息等,所以就需要接管异常处理。
此文章只做笔记,有不对或不详细的地方欢迎大家留言交流。

首先先在application下创建目录exception
然后创建BaseException类,此类为自定义异常类基类,继承框架异常类或php异常类都可。
<?php
/**
* BaseException.php
* 文件描述:自定义异常类基类,继承框架异常类
*/ namespace app\common\exception; use think\Exception;
use Throwable; /**
* Class BaseException
* 自定义异常类的基类
* @package app\common\exception
*/
class BaseException extends Exception
{
public function __construct($message = "", $code = 0, Throwable $previous = null)
{
parent::__construct($message, $code, $previous);
}
}
这里重写父类的构造方法,然后调用父类的构造方法,这块我看的有点迷,欢迎大家留言分享。
手册上写了,框架支持异常页面由开发者自定义类进行处理,需要配置参数exception_handle
// 异常处理handle类 留空使用 \think\exception\Handle
'exception_handle' => '\\app\\common\\exception\\Http',
自定义类需要继承Handle并且实现render方法,手册参考:https://www.kancloud.cn/manual/thinkphp5/126075
<?php
/**
* ExceptionHandler.php
* 文件描述:重写后的异常处理类
*/ namespace app\common\exception; use DawnApi\exception\UnauthorizedException;
use Exception;
use think\exception\Handle;
use think\Log; class ExceptionHandler extends Handle
{
private $code;//http状态码
private $msg;//异常消息
private $errorCode;//异常状态码 public function render(Exception $e)
{
if ($e instanceof BaseException)
{
//使用instanceof判断异常是否为自定义异常
$this->code = 200;
$this->msg = $e->getMessage();
$this->errorCode = $e->getCode();
} elseif ($e instanceof UnauthorizedException) {
//使用instanceof判断异常是否为第三方扩展包异常
$this->code =200;
$this->errorCode = 401;
$this->msg = '授权失败';
} else {
//其他异常
$this->errorCode = 10003;
$this->msg = '操作失败';
}
$this->recordErrorLog($e);//将异常写入日志,方便查看
return json(['code'=>$this->errorCode,'msg'=>$this->msg]);
} /**
* Notes:将异常写入日志
* @param Exception $e
*/
private function recordErrorLog(Exception $e) {
Log::init([
'type' => 'File',
'path' => LOG_PATH,
'level' => ['error'],
]);
Log::record([
'错误文件' => $e->getFile(),
'错误行数' => $e->getLine(),
'错误代码' => empty($this->code) ? $e->getCode() : $this->code,
'错误消息' => empty($this->message) ? $e->getMessage() : $this->message,
], 'error');
}
}
TP5接口开发之异常处理接管的更多相关文章
- PHP/TP5 接口设计中异常处理
PHP提供 Exception 类来处理异常 new Exception('错误信息(默认为空)','错误代码(默认0)','异常链中前一个异常') 然后可以通过 e -> getMessage ...
- springboot返回统一接口与统一异常处理
springboot返回统一接口与统一异常处理 编写人员:yls 编写时间:2019-9-19 0001-springboot返回统一接口与统一异常处理 简介 创建统一的返回格式 Result 封装统 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《Python Web 接口开发与测试》---即将出版
为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化相关的,工作中的接口自动化颇有成效. 我一直是一个没有测试大格局的人,在各种移动测试技术爆发的这一年,我却默默耕耘着自己的一亩三分地儿(We ...
- 浅谈 PHP 与手机 APP 开发(API 接口开发) -- 转载
转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因 ...
- 支付宝WAP支付接口开发(Node/Coffee语言)
此博客不更新很久了, 更新的文档在这, 有兴趣到这里围观: http://neutra.github.io/2013/%E6%94%AF%E4%BB%98%E5%AE%9DWAP%E6%94%AF%E ...
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...
- C#.NET微信公众账号接口开发系列文章整理--微信接口开发目录,方便需要的博友查询
前言: 涉及微信接口开发比较早也做的挺多的,有时间的时候整理了开发过程中一些思路案例,供刚学习微信开发的朋友参考.其实微信接口开发还是比较简单的,但是由于调试比较麻烦,加上微信偶尔也会给开发者挖坑,并 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
随机推荐
- mangodb之save与insert区别
save:未指定 _id 参数 插入成功,自动生成_id指定 _id 但 _id 对应的记录不存在 插入成功,_id不变指定 _id 但 _id 对应的记录存在 根据_id,更新记录 insert: ...
- Qt中的强制类型转换
在C++开发中经常要进行数据类型的强制转换. 刚开始学习的时候,直接对基本数据类型强制类型转换,如float fnum = 3.14; int num = (int)fnum; 随着C++标准的发展, ...
- python3 内建函数filter
Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是 ...
- JVM常见面试题及答案
11.JVM内存分哪几个区,每个区的作用是什么? java虚拟机主要分为以下一个区: 方法区:1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区 ...
- windows开启PostgreSQL数据库远程访问
1.在PostgreSQL安装目录下data文件夹,打开pg_hba.conf文件,新增允许访问的ip 2.打开postgresql.conf,将listen_addresses = 'localho ...
- 《linux就该这么学》课堂笔记17 分离解析、DHCP、电子邮件系统
1.动态主机配置协议(DHCP,Dynamic Host Configuration Protocol) 自动管理局域网内主机的IP地址.子网掩码.网关地址及DNS地址等参数,可以有效地提升IP地址的 ...
- Nginx Rewrite相关功能-ngx_http_rewrite_module模块指令
Nginx Rewrite相关功能-ngx_http_rewrite_module模块指令 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Nginx 核心配置-长连接配置
Nginx 核心配置-长连接配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.长连接配置参数说明 keepalive_timeout number; 设定保持连接超时时长,0 ...
- 解决nginx反向代理webservice的soap:address location问题
原文:https://blog.csdn.net/mn960mn/article/details/50716768 一:首先来发布一个web service package com.ws.servic ...
- jackson springboot配置时间格式
yml文件中这样进行配置 spring: jackson: date-format: yyyy-MM-dd HH:mm:ss spring.jackson.date-format指定日期格式,比如yy ...