thinkphp5-全局异常处理的先导篇

thinkphp5的异常处理流程就是当你捕获到异常时,一直向上抛出,最后会由tp5框架的全局异常处理捕获并返回一个html页面,这样即使客户端接收到了html页面,也看不懂且不需要这样的返回结果。

  • 如果客户端接收结构服务器的返回是用json格式做处理,或者说客户端是ios端,那么你服务器异常返回一个html页面,有可能会造成客户端的崩溃。

  • 如果是服务器内部的代码错误,也并不需要让客户端知道是服务器的内部的什么错误,客户端并不关心服务器的内部是什么错误,所以这个时候服务器有时候并不用把错误信息都返回给客户端,自己的内部错误可以用日志记录起来。

  • 自定义异常返回结果,这样能更灵活的处理服务器发生异常错误的问题。


现在来模拟一下异常处理的过程:
1,首先在model操作数据库的时候产生异常错误。
在这里插入图片描述
2,在控制层banner.php中捕获并处理异常。

<?php
namespace app\api\controller\v1;
use app\api\validate\IDMustBePositiveInt;
use app\api\model\Banner as BannerModel;
use think\Exception;

class Banner {
    /*
     * 获取指定id 的banner信息
     * @url  /banner/:id
     * @http GET
     * @id banner的id
     * */
    public function getBanner($id) {

        (new IDMustBePositiveInt())->goCheck();
		
		//将model层返回的结构做异常处理
        try{
            $banner = BannerModel::getBannerByID($id);
        }catch(Exception $ex){
        	//自定义异常的返回结构
        	//定义统一描述错误:
        	//error_code:自定义的错误码
        	//msg:错误描述信息
        	//400:状态码
            $err = [
                'error_code' => 10001,
                'msg' => $ex->getMessage()
            ];
            //不能直接返回一个数组,要转换成json字符串的形式返回给客户端,400代表http的状态码
            return json($err,400);
        }
        return $banner;
    }

}

结构就是这样,返回给客户端的就是一个json格式的错误提示。
在这里插入图片描述
如果在banner.php中捕获了异常但是没有处理它,而是继续向上抛出,那么

class Banner {
    public function getBanner($id) {
        (new IDMustBePositiveInt())->goCheck();
        try{
            $banner = BannerModel::getBannerByID($id);
        }catch(Exception $ex){
         throw  new Exception($ex);
        }
        return $banner;
    }
}

那么就会返回个客户端一个html的页面——奇丑无比
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值