thinkphp5中是怎么自定义全局异常
发表于:2024-11-29 作者:千家信息网编辑
千家信息网最后更新 2024年11月29日,本篇内容主要讲解"thinkphp5中是怎么自定义全局异常",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"thinkphp5中是怎么自定义全局异常"吧!为了
千家信息网最后更新 2024年11月29日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安全错误
数据库的锁怎样保障安全
中国台湾oa软件开发视频
网络安全法约谈制度
佛山医院食堂自助点餐软件开发
坦克世界玩那个服务器好
高考志愿填报的软件开发
巴夏网络安全有用吗
黑暗和光明服务器
沃尔玛网络安全处罚
格斗江湖服务器维护一次多久
杨浦区品牌软件开发价格行情
上位机 软件开发
image 服务器
服务器管理器端口怎么看
定制化服务器如何选择
sql数据库优化分析
2018国家网络安全主题是
中兴冷板式液冷服务器
微信聊天记录从服务器
打通电话出现服务器异常
放数据库的机器
手机怎样连接远程服务器桌面
双色球机选服务器
公共信息网络安全管理系统
linux显示当前服务器列表
全球顶级硬件服务器
南宁直销软件开发
著名的软件开发大学
数据库中文本数据类型长度
石狮网络安全护航
软件开发的工具及作用