这期内容当中小编将会给大家带来有关如何在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
页面输出结果如下
可见,其并没有执行自定义异常处理函数。
<强>使用自定义的异常处理强>
在配置。php中修改如下配置
//,异常处理处理类,留空使用,认为\ \ \ Handle 异常; ,& # 39;exception_handle& # 39;,=祝辞,& # 39;应用\ lib \例外\ exceptionhandler # 39;,然后再运行
<>强自定义异常处理类强>
一类异常是用户行为导致的异常,比如没有查询到符合条件的数据(从另一个角度来说,这其实不算异常),一类错误是运行时错误。而用户导致的异常可能分为很多种,所以需要自定义相关的类。
<强>首先定义一个父类强>
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中对异常进行处理