Thinkphp5框架异常处理操作实例分析


Posted in PHP onJune 03, 2020

本文实例讲述了Thinkphp5框架异常处理操作。分享给大家供大家参考,具体如下:

异常处理

有时候服务端会报出我们无法感知的错误,TP5默认会自动渲染错误的形式,生产环境中这样的形式并不是我们想要的。

未知错误

1.exception\Handle.php下的render方法需要覆盖

创建ApiHandleException.php

<?php

namespace app\common\lib\exception;
use think\exception\Handle;

class ApiHandleException extends Handle {

  /**
   * http 状态码
   * @var int
   */
  public $httpCode = 500;

  public function render(\Exception $e) {
    return show(0, $e->getMessage(), [], $this->httpCode);
  }
}

2.修改config.phpexception_handle配置项

已知错误

我们在判断一个数据是否合法的时候,若不合法则抛出异常。

例如:

if($data['msg'] != 1){
      throw Exception('数据异常');
    }

使用内置的异常http状态码始终为500

1.创建ApiException.php

<?php

namespace app\common\lib\exception;
use think\Exception;

class ApiException extends Exception {

  public $message = '';
  public $httpCode = 500;
  public $code = 0;
  /**
   * @param string $message
   * @param int $httpCode
   * @param int $code
   */
  public function __construct($message = '', $httpCode = 0, $code = 0) {
    $this->httpCode = $httpCode;
    $this->message = $message;
    $this->code = $code;
  }
}

2.对ApiHandleException.php改写

<?php

namespace app\common\lib\exception;
use think\exception\Handle;

class ApiHandleException extends Handle {

  /**
   * http 状态码
   * @var int
   */
  public $httpCode = 500;

  public function render(\Exception $e) {
    if ($e instanceof ApiException) {
      $this->httpCode = $e->httpCode;
    }
    return show(0, $e->getMessage(), [], $this->httpCode);
  }
}

开发环境

在开发环境的时候依旧使用异常渲染的模式

ApiHandleException.php中添加代码

if(config('app_debug') == true) {
      return parent::render($e);
    }

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
复杂检索数据并分页显示的处理方法
Oct 09 PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 PHP
用php制作简单分页(从数据库读取记录)的方法详解
May 04 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
php操作redis缓存方法分享
Jun 03 PHP
php实现简单的MVC框架实例
Sep 23 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
php解决约瑟夫环算法实例分析
Sep 30 PHP
Laravel数据库读写分离配置的方法
Oct 13 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 #PHP
PHP数组基本用法与知识点总结
Jun 02 #PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
Jun 02 #PHP
PHP与Web页面交互操作实例分析
Jun 02 #PHP
PHP Web表单生成器案例分析
Jun 02 #PHP
一文看懂PHP进程管理器php-fpm
Jun 01 #PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 #PHP
You might like
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
PHP编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
Python中文件遍历的两种方法
2014/06/16 Python
pandas string转dataframe的方法
2018/04/11 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python通过socketserver处理多个链接
2020/03/18 Python
python实现拼接图片
2020/03/23 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
2014小学语文教学工作总结
2014/12/17 职场文书
中秋晚会致辞
2015/07/31 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
如何利用python实现列表嵌套字典取值
2022/06/10 Python
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技