怎么在yii2中开发api接口时处理全局异常

  介绍

怎么在yii2中开发api接口时处理全局异常?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>注册异常处理器

<代码> yii2> 控制器/动作> 组件=祝辞errorHandler> #,配置/web.php   组件# 39;& # 39;=祝辞,(   & # 39;才能errorhandler # 39;,=祝辞,(   ,,,& # 39;errorAction& # 39;,=祝辞,& # 39;例外/处理程序# 39;   ,,)   )

<强>异常处理器

定义相应的异常处理器,<代码>应用\行动\ ErrorApiAction 继承<代码> yii \ web \ ErrorAction> yii2> #,控制器/ExceptionController.php   php & lt; ?      namespace 应用\控制器;      use , yii \ web \控制器;      class  ExceptionController  extends 控制器   {   ,/* *   ,,*,为,actionHandler 挂载独立的,行动   ,,*,@return 数组   ,,*/public 才能;function 行为()   {才能   ,,,return  [   ,,,,,& # 39;处理程序# 39;,=祝辞,(   ,,,,,,,& # 39;类# 39;,=祝辞,& # 39;应用\ \ ErrorApiAction&行动# 39;   ,,,,,)   ,,,);   ,,}   }

对<代码> 友api好的错误异常处理器,这里我也只是简单的把响应格式改了一下,异常的上下文还是用<代码> yii2> /ErrorApiAction.php #行动   php & lt; ?/* *   ,* @author  wangzhijian@styd.com   ,* @date  2019 - 5 - 13, 17:20:10   ,* Api 全局错误异常处理器   ,*/namespace 应用\行动;      use , Yii;   use  yii \ web \ ErrorAction;   use  yii \ web \反应;      class  ErrorApiAction  extends  ErrorAction   {   public 才能;function 运行()   {才能   ,,,//,根据异常类型设定相应的响应码   ,,,Yii:应用程序→美元getResponse ()→setStatusCodeByException ($ this→例外);   ,,,//,json 格式返回   ,,,Yii:应用程序→美元getResponse ()→format =,响应:FORMAT_JSON;   ,,,//,返回的内容数据   ,,,return  [   ,,,,,& # 39;味精# 39;,=祝辞,$ this→异常→getMessage (),   ,,,,,& # 39;错# 39;,=祝辞,$ this→异常→getCode ()   ,,,);   ,,}   }

<强>异常实体

主要是简单的把状态码的传递封装一下,用更容易理解的类名来代理传递。
<代码>异常/textbox。php代码

& lt; php ?/* *   ,* app 异常基础类   ,*/namespace 应用\异常;      class  HttpException  extends  \ yii \ web \ textbox   {   public 才能;function  __construct ($ message =, null,, code 美元;=,0,,\ Exception  previous 美元;=,null)   {才能   ,,,的父母:__construct ($ this→statusCode,,消息,美元,美元的代码,,之前的美元);   ,,}   }

<代码>/HttpForbiddenException异常。php代码

& lt; php ?/* *   400年,*,bad 请求   ,*/namespace 应用\异常;      class  HttpBadRequestException  extends  textbox   {   public 才能;statusCode 美元;=,400;   }

<代码>/HttpUnauthorizedException异常。php代码

& lt; php ?/* *   *大敌;401年,未经授权的   ,*/namespace 应用\异常;      class  HttpUnauthorizedException  extends  textbox   {   public 才能;statusCode 美元;=,401;   }

<代码>/HttpForbiddenException异常。php代码

& lt; php ?/* *   403年,*,被禁止的   ,*/namespace 应用\异常;      class  HttpForbiddenException  extends  textbox   {   public 才能;statusCode 美元;=,403;   }

<代码>/HttpNotFoundException异常。php代码

& lt; php ?/* *   404年,*,not 发现   ,*/namespace 应用\异常;      class  HttpNotFoundException  extends  textbox   {   public 才能;statusCode 美元;=,404;   }

<强>使用范例

在一些<代码> 服务逻辑模型中根据需要即时抛出异常即可,上层控制器拿到的永远都是正常的返回数据,绝对的<代码> 2 xx

怎么在yii2中开发api接口时处理全局异常