• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > Thinkphp5中是如何自定义全局异常

Thinkphp5中是如何自定义全局异常

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了Thinkphp5异常,Thinkphp自定义全局异常等相关知识,希望对您有所帮助

下面给大家讲解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




 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Thinkphp5中是如何自定义全局异常

相关文章

  • windows系统php环境安装swoole具体步骤
  • PS简单制作碎花布上的拼贴瓷砖文字效果教程
  • 一文搞定TP框架中session()的用法
  • 微信小程序获取设备信息api示例
  • Photoshop改进UI设计的一些心得技巧
  • corelDRAW 9 打造水晶表情
  • Photoshop绘制美国队长盾牌图标教程
  • CSS如何修改placeholder的颜色
  • Workerman中你不得不知道的属性reusePort
  • 百度统计、cnzz刷搜索词和来路链接原理,统计工具推广广告方法

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 分享几种用PHP写99乘法表的方式
    • 关于24小时快速排名SEO优化关键词排名前三的猫腻
    • YII如何将对象转化为数组或直接输出为json格式
    • phpMyadmin该怎么实现root账户外部访问
    • Mysql如何允许外网访问设置
    • 百度与谷歌在SEO表现上的差别
    • 使用Let's Encrypt(certbot)安装免费SSL证书
    • PHP将数据导出成excel表格
    • ThinkPHP6.0 重写URL去掉Index.php的解决方法
    • php如何将html转为图片

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有