什么是异常
从更加广泛的角度来看,异常包含两个方面,一方面是程序执行时由于语法、运行时错误等导致的异常,一方面时没有给予正确的反馈,如客户端要查询某个产品,没有查询到,我认为这也属于异常的一种。
第一种异常TP框架本身会在页面中输出错误信息,但是第二种异常则一般不会输出任何信息,所以非常不方便调试。
本文将详细介绍关于ThinkPHP异常处理的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
前提环境
现在 PHP 在很多时候是为前端提供接口,所以我们的异常处理也基于这一点进行处理。
在开发阶段,TP 原有的异常处理是在页面中输出异常信息,这一点能够满足需求,但在生产环境中,则需要以其他方式处理异常。
本文都是针对生产环境的异常处理
AOP 编程
现在在很多语言中,都非常流行 AOP 编程思想,即面向切面编程思想,通俗的说,就是用统一的方式处理问题,而不是用相同的方式分别处理多个问题,对于异常处理来说,就是定义统一的异常信息,用统一的方式处理
大致思路
自定义异常处理类,重写默认异常处理类的 render 方法,然后配置使用自定义异常处理类处理所有异常
代码实现
在根目录下创建目录 exception,在其下创建ExceptionHandle.php,此类要继承 handle 类
class ExceptionHandler extends Handle
创建几个属性,用于定义异常信息
// http 错误码 private $code; // 自定义异常信息 private $msg; // 自定义错误码 private $errorCode;
覆盖 Handle 类中的render 方法,当我们在代码中使用 throw new Exception() 方式抛出异常信息时,其实就是调用了 render 方法,所以我们要重写此方法,以返回我们自己的信息
public function render(Exception $ex) { return json(['msg'=>"自定义异常信息"]); nbsp; }
下面新建控制器 Product,添加方法,进行测试
public function getProduct($id) { try{ 3/0; } catch(Exception $ex){ throw $ex; } }
然后添加如下路由
Route::get("product/:id","api/v1.Product/getProduct");
输入如下url 测试
http://z.cn/product/2
页面输出结果如下
可见,其并没有执行自定义异常处理函数。
使用自定义的异常处理
在 config.php 中修改如下配置
// 异常处理handle类 留空使用 /think/exception/Handle 'exception_handle' => 'app/lib/exception/ExceptionHandler',
新闻热点
疑难解答