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

本文实例讲述了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.php的exception_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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

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

(0)

相关推荐

  • Thinkphp5框架中引入Markdown编辑器操作示例

    本文实例讲述了Thinkphp5框架中引入Markdown编辑器操作.分享给大家供大家参考,具体如下: 编辑器下载地址以及演示:https://pandao.github.io/editor.md/ 1.把下载的项目放在public目录下 2.页面中引入jquery.js,editormd.js,editormd.css demo <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu

  • thinkphp5.1 框架钩子和行为用法实例分析

    本文实例讲述了thinkphp5.1 框架钩子和行为用法.分享给大家供大家参考,具体如下: 行为 ThinkPHP中的行为是一个比较抽象的概念,可以把行为想象成在应用执行过程中的一个动作. 在框架的执行流程中,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测.多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的第一次访问弹出Hello,world!这些都可以看成是一种行为,把这些行为抽离出来的目的是为了让你无需改动框架和应用,而在外围通过

  • thinkphp5.1框架模板赋值与变量输出示例

    本文实例讲述了thinkphp5.1框架模板赋值与变量输出.分享给大家供大家参考,具体如下: Demo.php namespace app\index\controller; use think\Controller; use think\facade\View; class Demo extends Controller { public function test1() { //直接将内容输出到页面,不通过模板 $con = '<h3 style="color:red">

  • ThinkPHP5.1验证码功能实现的示例代码

    ۩ 背景 ThinkPHP5.1 已经出现很久了,最近有所接触,下面介绍一下常用的第三方验证码功能的使用. 环境 框架版本: ThinkPHP5.1.2 运行环境: CentOS7.2.phpStudy2017.Nginx ♜ 功能开发 1).引入第三方扩展包 进行 TP5 的开发,Composer 的使用会成为重要技能,以 windows 为例子,输入命令: composer require topthink/think-captcha 完成上述操作,会在以下目录中出现 captcha 的扩展

  • thinkphp5.1 框架导入/导出excel文件操作示例

    本文实例讲述了thinkphp5.1 框架导入/导出excel文件操作.分享给大家供大家参考,具体如下: thinkphp5.1 导入excel文件 public function importExcel() { try { //获取表格的大小,限制上传表格的大小 if ($_FILES['file']['size'] > 10 * 1024 * 1024) { //文件过大 log_debug($log_title . 'END === MSG:' . '文件过大'); parent::end

  • THINKPHP5分页数据对象处理过程解析

    在用到THINKPHP5的分页的时候,我们可以发现获取的数据是对象,如果我们要对数据进行循环增加数据就实现不了 今天用此方法解决,以做记录方便以后忘了查看 // 查询状态为1的用户数据 并且每页显示30条数据 $list = db('commission_log')->order('id desc')->paginate(30); // 获取分页显示 $page = $list->render(); $list = $list->all(); //这是关键 // 模板变量赋值 fo

  • THINKPHP5.1 Config的配置与获取详解

    首先需要在控制器内引入Config类,这里使用5.1新增的facade,通过facade可以静态的调用原本需要被继承才能使用的方法. 获取配置: namespace app\index\controller; use think\facade\Config; class index { public function index() { //获取所有配置内容,返回的是个Array dump(Config::get()); //获取app中的配置内容,返回的是个Array dump(Config:

  • ThinkPHP5框架中使用JWT的方法示例

    本文实例讲述了ThinkPHP5框架中使用JWT的方法.分享给大家供大家参考,具体如下: JWT下载地址:https://jwt.io 可以直接去github上下载,也可以使用composer 使用composer的话要确保你的电脑上安装了composer,进入项目根目录下载即了,自动会放在vendor目录下 创建文件 我是放在common目录下 使用教程 github都有的 贴源码 JWTAuth.php <?php namespace app\common\Auth; use \Lcobuc

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

    本文实例讲述了Thinkphp5框架异常处理操作.分享给大家供大家参考,具体如下: 异常处理 有时候服务端会报出我们无法感知的错误,TP5默认会自动渲染错误的形式,生产环境中这样的形式并不是我们想要的. 未知错误 1.exception\Handle.php下的render方法需要覆盖 创建ApiHandleException.php <?php namespace app\common\lib\exception; use think\exception\Handle; class ApiHa

  • Python Flask框架模板操作实例分析

    本文实例讲述了Python Flask框架模板操作.分享给大家供大家参考,具体如下: 模板 在前面的示例中,视图函数的主要作用是生成请求的响应,这是最简单的请求.实际上,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.本节学到的模板,它的作用即是承担视图函数的另一个作用,即返回响应内容. 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体值需要从使用的数据中获取.使用真实值替换变量,再返

  • Laravel5.1 框架文件管理操作实例分析

    本文实例讲述了Laravel5.1 框架文件管理操作.分享给大家供大家参考,具体如下: Laravel提供了一套很好用的文件系统 方便于管理文件夹和文件,支持Amazon S3和Rackspace云存储等驱动. 1 配置 文件系统的配置文件在 config/filesyetems.php 中,且它的注释写的很清楚了,此外你可以在disks数组中创建新的disk: <?php return [ /* |------------------------------------------------

  • javascript性能优化之DOM交互操作实例分析

    本文实例讲述了javascript性能优化之DOM交互操作技巧.分享给大家供大家参考,具体如下: 在javascript各个方面,DOM毫无疑问是最慢的一部分.DOM操作与交互要耗费大量时间,因为它们往往需要重新渲染整个页面或者某一部分.理解如何优化与DOM的交互可以极大提高脚本完成的速度. 1.最小化DOM更新 看下面例子: var list = document.getElementById("ul"); for (var i=0; i < 10; i++){ var ite

  • Python Selenium异常处理的实例分析

    1.说明 在使用selenium时,不可避免的会遇到一些异常情况,比如超时.没有找到节点的错误等等.一旦出现这样的错误,程序就不能再运行了.这里我们可以使用tryexcept语句来捕捉异常. 2.实例 from selenium import webdriver from selenium.common.exceptions import TimeoutException, NoSuchElementException browser = webdriver.Chrome() try: brow

  • python通过opencv调用摄像头操作实例分析

    实例源码: #pip3 install opencv-python import cv2 from datetime import datetime FILENAME = 'myvideo.avi' WIDTH = 1280 HEIGHT = 720 FPS = 24.0 # 必须指定CAP_DSHOW(Direct Show)参数初始化摄像头,否则无法使用更高分辨率 cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 设置摄像头设备分辨率 cap.set(cv

  • tp5(thinkPHP5框架)时间查询操作实例分析

    本文实例讲述了tp5(thinkPHP5框架)时间查询操作.分享给大家供大家参考,具体如下: 在项目中 可能会遇到 跨月份进行查询 比如在 当输入201809 会获取当月的开始时间$start_month 和 结束时间 $end_month 会查询2018年9月份的数据 但是当其中的一个数据是在201809到201810 ,数据库的字段是 start_time end_time 这时候 Db::name("表名")->where('start_time','<= time'

  • Sanic框架异常处理与中间件操作实例分析

    本文实例讲述了Sanic框架异常处理与中间件操作.分享给大家供大家参考,具体如下: 简介 Sanic是一个类似Flask的Python 3.5+ Web服务器,它的写入速度非常快.除了Flask之外,Sanic还支持异步请求处理程序.这意味着你可以使用Python 3.5中新的闪亮的异步/等待语法,使你的代码非阻塞和快速. 前言:Sanic最低支持Python 3.5,如果需要学习Sanic,请先下载版本不低于3.5的Python包 异常 异常可以从请求处理程序中抛出,并由Sanic自动处理.异

  • laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析

    本文实例讲述了laravel框架数据库操作.查询构建器.Eloquent ORM操作.分享给大家供大家参考,具体如下: 1.连接数据库 laravel连接数据库的配置文件位于config/database.php中,在其中connection字段中包含laravel所支持的数据库的配置信息,可以看到其中有主机.端口.数据库.用户名.密码等信息: 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'),

  • thinkphp连贯操作实例分析

    本文实例分析了thinkphp连贯操作用法.分享给大家供大家参考.具体分析如下: 一.常用连贯操作,可以接连使用但没前后顺序之分,后面一定要有方法select,updata,delete,find 1.where:帮助我们设置查询条件 2.order:对结果进行排序 复制代码 代码如下: $arr=$m->order('id desc')->select();//字符串方法,默认是asc升序排列,加desc改为降序排列  $arr=$m->order(array('id'=>'de

随机推荐