如何在ThinkPHP中对异常进行处理

  介绍

这期内容当中小编将会给大家带来有关如何在ThinkPHP中对异常进行处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强>什么是异常

从更加广泛的角度来看,异常包含两个方面,一方面是程序执行时由于语法,运行时错误等导致的异常,一方面时没有给予正确的反馈,如客户端要查询某个产品,没有查询到,我认为这也属于异常的一种。

第一种异常TP框架本身会在页面中输出错误信息,但是第二种异常则一般不会输出任何信息,所以非常不方便调试。

本文将详细介绍关于ThinkPHP异常处理的相关内容,分享出来供大家参考学习、下面话不多说了,来一起看看详细的介绍吧。

<强>前提环境

现在PHP在很多时候是为前端提供接口,所以我们的异常处理也基于这一点进行处理。

在开发阶段,TP原有的异常处理是在页面中输出异常信息,这一点能够满足需求,但在生产环境中,则需要以其他方式处理异常。

本文都是针对生产环境的异常处理

AOP编程

现在在很多语言中,都非常流行AOP编程思想,即面向切面编程思想,通俗的说,就是用统一的方式处理问题,而不是用相同的方式分别处理多个问题,对于异常处理来说,就是定义统一的异常信息,用统一的方式处理

<强>大致思路

自定义异常处理类,重写默认异常处理类的渲染方法,然后配置使用自定义异常处理类处理所有异常

<强>代码实现

在根目录下创建目录例外,在其下创建ExceptionHandle。php,此类要继承句柄类

class  ExceptionHandler  extends 处理

创建几个属性,用于定义异常信息

//, http 错误码,   private 代码;美元,//,自定义异常信息,   private 味精;美元,//,自定义错误码,   private  errorCode美元;

覆盖处理类中的渲染方法,当我们在代码中使用抛出新的异常()方式抛出异常信息时,其实就是调用了渲染方法,所以我们要重写此方法,以返回我们自己的信息

public  function 渲染(Exception 前美元),   {大敌;   ,return  json([& # 39;味精# 39;=在“自定义异常信息“]),,   以前,,}

下面新建控制器产品,添加方法,进行测试

public  function  getProduct ($ id),   {大敌;   试着{大敌;   ,,3/0;   }大敌;   ,抓住(Exception 前美元){,   throw 才能;美元前,   }大敌;   以前,}

然后添加如下路由

路线::获得(“产品/:id",“api/v1.Product/getProduct");

输入如url下测试http://z.cn/product/2

页面输出结果如下

如何在ThinkPHP中对异常进行处理

可见,其并没有执行自定义异常处理函数。

<强>使用自定义的异常处理

在配置。php中修改如下配置

//,异常处理处理类,留空使用,认为\ \ \ Handle 异常;   ,& # 39;exception_handle& # 39;,=祝辞,& # 39;应用\ lib \例外\ exceptionhandler # 39;,

然后再运行

如何在ThinkPHP中对异常进行处理

<>强自定义异常处理类

一类异常是用户行为导致的异常,比如没有查询到符合条件的数据(从另一个角度来说,这其实不算异常),一类错误是运行时错误。而用户导致的异常可能分为很多种,所以需要自定义相关的类。

<强>首先定义一个父类

class  BaseException  extends  Exception    {,   ,//http 状态码,   ,public 美元代码;//错误具体消息,   ,public 味精美元;//自定义错误码,   ,public  errorCode美元;   ,   ,//构造函数用于接收传入的异常信息,并初始化类中的属性,   ,public  function  __construct (params美元),   {大敌;   if 才能;(! is_array (params)美元),{,   ,,,返回;   ,,},   if 才能;(array_key_exists(& # 39;代码# 39;,,美元params)), {,   ,,这→美元code =,美元params[& # 39;代码# 39;];,   ,,},   if 才能;(array_key_exists(& # 39;味精# 39;,,美元params)), {,   ,,这→美元msg =,美元params[& # 39;味精# 39;];,   ,,},   if 才能;(array_key_exists (& # 39; errorcode # 39;,,美元params)), {,   ,,这→美元errorCode =,美元params [& # 39; errorcode # 39;];,   ,,},   }大敌;   }

如何在ThinkPHP中对异常进行处理