婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > yii2 開發api接口時優雅的處理全局異常的方法

yii2 開發api接口時優雅的處理全局異常的方法

熱門標簽:咸寧銷售電銷機器人系統 電銷機器人問門薩維品牌my 余姚電話機器人 百度地圖標注偏差 開發地圖標注類網站 外呼系統能給企業帶來哪些好處 百度地圖怎樣標注圖標 400電話蘭州申請請 廣東廣州在怎么申請400電話

前言:個人覺得,學習或溫習一套Web框架,在快速閱讀一遍文檔后,應從路由,控制器,請求/響應對象,數據模型(Logic,Dao,Entity),全局異常處理幾個方面下手,這幾項了解后,框架上手就游刃有余了。然后我比較喜歡在開工前整理好框架的全局異常處理,方便寫 api時錯誤的統一響應。

api接口的開發過程中,我們需要對用戶數據進行嚴格的校驗,防止非法輸入對服務產生安全問題,在開發過程中,我比較喜歡即時的以拋出異常的方式中斷請求的處理,并以全局異常處理器格式化處理后統一返回給客戶端。

今天就把 yii2 自帶的全局異常處理器改寫至對 api 友好(yii2yii\web\HttpException默認對 web 請求友好,都是以text/html的方式返回錯誤描述,對api不友好,api當然是json)。

注冊異常處理器

yii2也是以 controller/action 的方式定義一個異常處理器的,我們可以在 components=>errorHandler中自定義。

# config/web.php
'components' => [
  'errorHandler' => [
    'errorAction' => 'exception/handler'
  ]
]

異常處理器

定義相應的異常處理器,app\actions\ErrorApiAction 繼承 yii\web\ErrorAction,可以拿到yii2為我們整理好的全局異常。

# controllers/ExceptionController.php
?php

namespace app\controllers;

use yii\web\Controller;

class ExceptionController extends Controller
{
  /**
   * 為 actionHandler 掛載獨立的 action
   * @return array
   */
  public function actions()
  {
    return [
      'handler' => [
        'class' => 'app\actions\ErrorApiAction',
      ]
    ];
  }
}

api友好的錯誤異常處理器,這里我也只是簡單的把響應格式改了一下,異常的上下文還是用yii2自帶的處理的。

#actions/ErrorApiAction.php
?php
/**
 * @author wangzhijian@styd.com
 * @date 2019-5-13 17:20:10
 * Api 全局錯誤異常處理器
 */

namespace app\actions;

use Yii;
use yii\web\ErrorAction;
use yii\web\Response;

class ErrorApiAction extends ErrorAction
{
  public function run()
  {
    // 根據異常類型設定相應的響應碼
    Yii::$app->getResponse()->setStatusCodeByException($this->exception);
    // json 格式返回
    Yii::$app->getResponse()->format = Response::FORMAT_JSON;
    // 返回的內容數據
    return [
      'msg' => $this->exception->getMessage(),
      'err' => $this->exception->getCode()
    ];
  }
}

異常實體

主要是簡單的把狀態碼的傳遞封裝一下,用更容易理解的類名來代理傳遞。
exceptions/HttpException.php

?php
/**
 * app 異常基礎類
 */

namespace app\exceptions;

class HttpException extends \yii\web\HttpException
{
  public function __construct($message = null, $code = 0, \Exception $previous = null)
  {
    parent::__construct($this->statusCode, $message, $code, $previous);
  }
}

exceptions/HttpForbiddenException.php

?php
/**
 * 400 bad request
 */

namespace app\exceptions;

class HttpBadRequestException extends HttpException
{
  public $statusCode = 400;
}

exceptions/HttpUnauthorizedException.php

?php
/**
 * 401 unauthorized
 */

namespace app\exceptions;

class HttpUnauthorizedException extends HttpException
{
  public $statusCode = 401;
}

exceptions/HttpForbiddenException.php

?php
/**
 * 403 forbidden
 */

namespace app\exceptions;

class HttpForbiddenException extends HttpException
{
  public $statusCode = 403;
}

exceptions/HttpNotFoundException.php

?php
/**
 * 404 not found
 */

namespace app\exceptions;

class HttpNotFoundException extends HttpException
{
  public $statusCode = 404;
}

使用范例

在一些 service logic model 中根據需要即時拋出異常即可,上層控制器拿到的永遠都是正常的返回數據,絕對的2xx響應簇

throw new HttpBadRequestException("具體的非法描述", 4001);
throw new HttpUnauthorizedException("請認證后訪問");
throw new HttpForbiddenException("無權訪問");
throw new HttpNotFoundException("請求資源不存在");

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 實例講解如何在PHP的Yii框架中進行錯誤和異常處理
  • YII Framework教程之異常處理詳解

標簽:臨沂 麗江 鷹潭 衡陽 巴彥淖爾 十堰 重慶 銅陵

巨人網絡通訊聲明:本文標題《yii2 開發api接口時優雅的處理全局異常的方法》,本文關鍵詞  yii2,開發,api,接口,時,優雅,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《yii2 開發api接口時優雅的處理全局異常的方法》相關的同類信息!
  • 本頁收集關于yii2 開發api接口時優雅的處理全局異常的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91免费观看在线| 国产精品456| 亚洲欧美一区二区在线观看| 国产日韩欧美一区二区三区综合| 欧美一个色资源| 91精品国产综合久久香蕉的特点| 777色狠狠一区二区三区| 欧美日本在线看| 欧美一级生活片| 日韩色视频在线观看| 精品久久国产字幕高潮| 久久综合狠狠综合久久综合88| 欧美精品一区二区三区蜜臀| 久久嫩草精品久久久久| 国产精品人成在线观看免费| 国产精品久久毛片a| 亚洲色图欧美激情| 亚洲成人在线免费| 久久成人免费电影| 国产v综合v亚洲欧| 欧洲在线/亚洲| 7777精品伊人久久久大香线蕉超级流畅| 欧美三级午夜理伦三级中视频| 在线视频一区二区免费| 日韩视频永久免费| 欧美国产精品专区| 亚洲成人你懂的| 精品一区二区综合| 91在线porny国产在线看| 欧美绝品在线观看成人午夜影视| 欧美大片在线观看一区二区| 国产亚洲综合性久久久影院| 一级做a爱片久久| 久久国产剧场电影| 色综合天天视频在线观看| 欧美肥胖老妇做爰| 中文字幕乱码久久午夜不卡| 亚洲1区2区3区视频| 久久9热精品视频| 色婷婷综合久久久久中文一区二区 | 色婷婷狠狠综合| 欧美精品tushy高清| 中文字幕精品三区| 免费成人深夜小野草| 99久久精品国产一区二区三区| 91麻豆精品91久久久久同性| 国产精品无码永久免费888| 亚洲1区2区3区视频| av在线综合网| 国产清纯白嫩初高生在线观看91 | 黑人巨大精品欧美黑白配亚洲 | 亚洲一区二区三区影院| 国产伦精品一区二区三区视频青涩| 在线观看免费亚洲| 国产精品美女一区二区| 国模少妇一区二区三区| 欧美日韩国产在线观看| 亚洲久草在线视频| 国产福利精品一区| 欧美mv日韩mv国产网站| 亚洲第一电影网| 91日韩精品一区| 国产精品国模大尺度视频| 九九九精品视频| 欧美变态tickling挠脚心| 日日摸夜夜添夜夜添精品视频| 色婷婷久久一区二区三区麻豆| 国产精品青草综合久久久久99| 国产精品一二三| 久久久精品蜜桃| 国产伦精品一区二区三区免费 | 91香蕉国产在线观看软件| 国产欧美一二三区| 成人一区二区三区中文字幕| 久久久精品tv| 国产成人免费在线视频| 国产色婷婷亚洲99精品小说| 狠狠狠色丁香婷婷综合激情| 久久久九九九九| 成人午夜又粗又硬又大| 国产日产精品一区| 波多野结衣中文字幕一区 | 欧美中文一区二区三区| 亚洲免费资源在线播放| 欧美在线短视频| 三级久久三级久久| www成人在线观看| 懂色av噜噜一区二区三区av| 欧美国产一区二区在线观看| 99久久久久免费精品国产| 亚洲欧美福利一区二区| 在线观看视频一区二区| 亚洲国产精品一区二区久久 | 久久99日本精品| 久久久久国产精品人| 93久久精品日日躁夜夜躁欧美| 一区二区三区中文在线| 欧美一区二区三区在线观看视频| 久久er99热精品一区二区| 国产午夜精品一区二区三区嫩草| 99久久精品国产导航| 亚洲va欧美va人人爽午夜| 2欧美一区二区三区在线观看视频| 懂色av一区二区三区蜜臀| 一区二区在线免费观看| 欧美一区二区国产| 99热精品国产| 日本午夜精品一区二区三区电影| 久久蜜桃av一区二区天堂| 99精品久久久久久| 老司机午夜精品99久久| 亚洲情趣在线观看| 精品国产在天天线2019| 91久久香蕉国产日韩欧美9色| 美女视频免费一区| 亚洲老妇xxxxxx| 久久精品一二三| 欧美精品国产精品| kk眼镜猥琐国模调教系列一区二区| 亚洲国产日韩一区二区| 久久久精品国产免大香伊| 欧美日韩国产乱码电影| av在线不卡观看免费观看| 久久精品国产77777蜜臀| 亚洲免费观看在线视频| 久久精品夜夜夜夜久久| 日韩午夜av一区| 91成人看片片| 91丨porny丨首页| 国产精品小仙女| 久久成人精品无人区| 亚洲午夜久久久| 成人免费在线观看入口| 久久青草欧美一区二区三区| 日韩一区二区麻豆国产| 欧美怡红院视频| 色噜噜夜夜夜综合网| 成人国产一区二区三区精品| 国产精品一级片在线观看| 奇米四色…亚洲| 日本三级亚洲精品| 亚洲第一狼人社区| 亚洲国产精品一区二区尤物区| 亚洲女人****多毛耸耸8| 中文字幕一区免费在线观看| 国产三级一区二区| 国产亚洲一本大道中文在线| 欧美tk—视频vk| 精品国产精品网麻豆系列| 欧美成人免费网站| 精品国产网站在线观看| 欧美精品一区二区久久婷婷| 欧美精品一区二区三区一线天视频| 欧美一区二区久久| 精品国产一区二区三区不卡| 26uuu精品一区二区三区四区在线| 精品国产乱码久久久久久久久| 欧美一级午夜免费电影| 精品国产欧美一区二区| 久久婷婷综合激情| 国产精品网站在线播放| 中文字幕一区二区视频| 亚洲综合激情小说| 日韩高清国产一区在线| 精品亚洲aⅴ乱码一区二区三区| 久久se这里有精品| 成人av资源下载| 欧洲av一区二区嗯嗯嗯啊| 欧美精品久久99久久在免费线| 在线成人av影院| 国产偷v国产偷v亚洲高清| 国产精品国产三级国产a| 亚洲国产一区二区在线播放| 青青草精品视频| 国产精品一区二区在线观看网站| 99久久免费国产| 欧美一级夜夜爽| 中文字幕成人在线观看| 午夜精品福利久久久| 国产乱对白刺激视频不卡 | 日日欢夜夜爽一区| 韩国女主播一区二区三区| 91性感美女视频| 欧美一区二区三区免费| 国产免费观看久久| 日韩二区在线观看| 成人在线视频一区二区| 欧美一区二区黄色| 亚洲欧美激情一区二区| 国产乱子伦视频一区二区三区| 91小宝寻花一区二区三区| 日韩精品一区二区三区蜜臀| 亚洲欧美中日韩| 国产在线国偷精品免费看| 欧美亚男人的天堂| 国产欧美一区二区三区在线看蜜臀 | 欧美日韩精品系列| 国产精品久久久久影院老司| 青青国产91久久久久久| 91激情在线视频|