美文网首页微信小程序开发微信小程序开发者
小程序全栈学习-自定义全局异常处理(下)

小程序全栈学习-自定义全局异常处理(下)

作者: Answer_ccbb | 来源:发表于2019-02-25 08:26 被阅读8次

    在上篇文章的基础上继续完善自定义的全局异常处理层。  

    根据异常的不同,有不同的处理方式:如果是用户输入导致的异常需要向客户端返回异常信息,不需要记录日志;如果是服务器代码自身导致的异常则需要记录日志,不需要向客户端返回异常信息(因为即使你返回异常信息,针对这种异常用户也无能为力)。

    在写代码过程中,如何区分这两种异常就成为问题的重中之重,常用的思路是建立BaseException,然后类各种由于用户输入导致的异常都要继承BaseException类,如果返回的异常是继承BaseException的类那么它就是第一种异常(用户输入导致的异常),反之则是第二种异常。

    这里采用接口中采用id来查询对应的Banner信息为例详细说明异常处理流程。

    1、在接口控制器中

    $banner = BannerModel::getBannerByID($id);   通过id参数来查找Banner信息,并赋值给变量banner

        if(!$banner){       //如果banner为空

            throw new BannerMissException();   //如果变量banner为空,抛出BannerMissException,而BannerMissException 是继承BaseException的类

        }

    return $banner;  //Banner不为空,返回Banner信息

    2、BannerMissException 继承BaseException:

    class BannerMissException extends BaseException

    3、判断结果:第一种异常

    if($e instanceof BaseException){ //如果是自定义的异常

        $this->code = $e->code;

        $this->msg = $e->msg;

        $this->errorCode = $e->errorCode;

    }

    $results = [

            'msg' => $this->msg,

            'error_code'=>$this->errorCode,

            'request_url'=>$request->url()

        ];

        return json($results,$this->code);

    }

    这里有几点需要注意:

    rest要求返回的错误信息有:错误码,错误信息、发生错误的URL,其中前两项比较容易理解,如何得到发生错误的当前的URL?

    $request = Request::instance();//先实例化request对象;

    'request_url'=>$request->url();//request对象中的url()方法可以直接得到当前的URL路径。

    相关文章

      网友评论

        本文标题:小程序全栈学习-自定义全局异常处理(下)

        本文链接:https://www.haomeiwen.com/subject/ixfjyqtx.html