好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > yii2 開發(fā)api接口時優(yōu)雅的處理全局異常的方法

yii2 開發(fā)api接口時優(yōu)雅的處理全局異常的方法

熱門標(biāo)簽:咸寧銷售電銷機(jī)器人系統(tǒng) 電銷機(jī)器人問門薩維品牌my 余姚電話機(jī)器人 百度地圖標(biāo)注偏差 開發(fā)地圖標(biāo)注類網(wǎng)站 外呼系統(tǒng)能給企業(yè)帶來哪些好處 百度地圖怎樣標(biāo)注圖標(biāo) 400電話蘭州申請請 廣東廣州在怎么申請400電話

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

api接口的開發(fā)過程中,我們需要對用戶數(shù)據(jù)進(jìn)行嚴(yán)格的校驗(yàn),防止非法輸入對服務(wù)產(chǎn)生安全問題,在開發(fā)過程中,我比較喜歡即時的以拋出異常的方式中斷請求的處理,并以全局異常處理器格式化處理后統(tǒng)一返回給客戶端。

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

注冊異常處理器

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

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

異常處理器

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

# controllers/ExceptionController.php
?php

namespace app\controllers;

use yii\web\Controller;

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

api友好的錯誤異常處理器,這里我也只是簡單的把響應(yīng)格式改了一下,異常的上下文還是用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()
  {
    // 根據(jù)異常類型設(shè)定相應(yīng)的響應(yīng)碼
    Yii::$app->getResponse()->setStatusCodeByException($this->exception);
    // json 格式返回
    Yii::$app->getResponse()->format = Response::FORMAT_JSON;
    // 返回的內(nèi)容數(shù)據(jù)
    return [
      'msg' => $this->exception->getMessage(),
      'err' => $this->exception->getCode()
    ];
  }
}

異常實(shí)體

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

?php
/**
 * app 異?;A(chǔ)類
 */

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 中根據(jù)需要即時拋出異常即可,上層控制器拿到的永遠(yuǎn)都是正常的返回數(shù)據(jù),絕對的2xx響應(yīng)簇

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《yii2 開發(fā)api接口時優(yōu)雅的處理全局異常的方法》,本文關(guān)鍵詞  yii2,開發(fā),api,接口,時,優(yōu)雅,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《yii2 開發(fā)api接口時優(yōu)雅的處理全局異常的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于yii2 開發(fā)api接口時優(yōu)雅的處理全局異常的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 港片最颜色程度10颗星的电影 | 综合久久久久综合体桃花网| 日韩三级精品| 粗大抽搐白浊H高干H| 午夜啪啪福利视频| 57pao国产一区二区| 中国少妇在线观看AAAA视频| 秋霞免费在线| 国产在线h| 国产一级一片免费播放放a | 91视频小说| 一个男孩子顶哭男孩子| 少妇浪荡H肉辣文大全69| free性中国hd国语page1| 嗯啊好爽真紧嗯啊| 成人欧美一区二区三区视频不卡| 成人国产精品秘?免费观看动漫| 东京恋爱模样在线| 特级毛片在线播放| 亚洲午夜免费| 国产又粗又猛又色又黃网站| 国内熟女精品熟女A片视频小说 | 久久精品99精品免费观看| 免费在线观看欧美| 宝贝∽好硬∽好爽一再来视频| 天天草夜夜骑| 美国特级黄色片| 国产伦精品一区二区三区妓女38 | 韩国三级《偷妻》| 俄罗斯性xxx极品| 韩国三级日本三级少妇| 在线视频成人| 杨雨婷被躁在卧室里被吸乳| 三级全黄高潮大叫| 日日摸处处碰夜夜爽97| 老司机福利成人精品app| 国产精品99精品久久免费| 国产一级毛片一级A片酒瓶 | 亚洲欧美AV无码国产美韩系 | 国产综合日韩欧美久久一区91 | 好爽好紧别夹h|