主頁 > 知識庫 > YII2 全局異常處理深入講解

YII2 全局異常處理深入講解

熱門標(biāo)簽:注冊400電話申請 釘釘打卡地圖標(biāo)注 地圖標(biāo)注平臺怎么給錢注冊 安裝電銷外呼系統(tǒng) 百度商鋪地圖標(biāo)注 福州人工外呼系統(tǒng)哪家強(qiáng) 新河科技智能外呼系統(tǒng)怎么樣 常州地圖標(biāo)注服務(wù)商 衡水外呼系統(tǒng)平臺

首先,我們必須理性認(rèn)識到,任何一個即使穩(wěn)定的系統(tǒng)中也是存在著大量的 bug,不管是因為什么原因?qū)е碌腻e誤,我們都是需要做好防范的,最好的結(jié)果當(dāng)然是將異常糾正過來,返回客戶端一個正確的響應(yīng)結(jié)果,但絕大多數(shù)情況下是沒辦法返回正常結(jié)果的,只能返回一個客戶端一個異常的信息。
處理異常的方式,通常分為:

  1. 記錄日志
  2. 修復(fù)異常
  3. 返回客戶端錯誤

要處理好這個問題,我認(rèn)為比較簡單的方式就是將需要處理的異常按照場景先做一個分類。

常用的處理是: 用戶行為導(dǎo)致的錯誤通常不需要記錄日志,因為若是多人使用的情況下會導(dǎo)致日志量過大,但需要向客戶端返回具體原因以便用戶用正確的方式調(diào)用我們的接口;而服務(wù)器出現(xiàn)的錯誤則需要記錄日志,因為我們是需要解決這些錯誤的,記錄日志讓我們比較方便的找到錯誤的原因,快速解決,但不向客戶端返回具體原因,因為用戶沒辦法通過自己的行為使異常不再出現(xiàn)。當(dāng)然我們也可以根據(jù)自己的業(yè)務(wù)決定自己的異常處理方式。

在 ThinkPHP 或者其他框架中,如果出現(xiàn)異常,則會出現(xiàn)框架的一個異常頁面。

但如果我們開發(fā)的是 API,直接返回一個頁面給客戶端顯然不合理,因為別人在使用你的接口的時候還需要解析界面分析出結(jié)果,這么做是十分不合理的,所以,我們需要對框架的異常處理進(jìn)行重寫。以下使用 Yii2 框架作為例子講解重寫的邏輯:

首先,我們需要找到 Yii 框架異常處理的設(shè)置(../config/web.php)

 'components' => [
    'errorHandler' => [
      'errorAction' => 'site/error',
      'class' => 'app\common\ExceptionHandler',//(這里配置我們自己寫的異常處理方法)
    ],

為了讓我們的程序可以簡單的辨別出客戶的不當(dāng)調(diào)用導(dǎo)致的錯誤和服務(wù)器的錯誤,我們可以寫一個客戶的異常類。新建 common\UserException.php 文件

class UserException extends Exception
{
  // HTTP 狀態(tài)碼 404,200
  /**
   * @var int|mixed
   */
  public $code = 400;
  // 錯誤具體信息
  /**
   * @var mixed|string
   */
  public $msg = '參數(shù)錯誤';
  // 自定義的錯誤碼
  /**
   * @var int|mixed
   */
  public $errorCode = 10000;
 
  /**
   * UserException constructor.
   * @param $params
   */
  public function __construct($params=[]) {
    // 如果傳過來的不是數(shù)組則不進(jìn)行對象初始化
    if (!is_array($params)) {
      return;
    }
    // 判斷數(shù)組有沒有該鍵值
    if (array_key_exists('code',$params)) {
      $this->code = $params['code'];
    }
    if (array_key_exists('msg',$params)) {
      $this->msg = $params['msg'];
    }
    if (array_key_exists('errorCode',$params)) {
      $this->errorCode = $params['errorCode'];
    }
  }
}

新建 common/ExceptionHandler.php 文件,因為 yii 的異常處理的渲染是由 vendor\yiisoft\yii2\web\ErrorHandler.php 中的 renderException 方法渲染的,所以我們開發(fā)屬于自己的異常處理類的時候可以選擇繼承該類并重寫這個方法。

這就完成了全局的異常處理,讓我們看看效果

當(dāng)我們開啟 debug 模式時拋出錯誤:

關(guān)閉 debug 模式,拋出服務(wù)器端異常:

 public function actionIndex()
 {
  throw new \Exception();
 
 }

關(guān)閉 debug 模式,拋出客戶端異常:

  public function actionIndex()
  {
    throw new UserException();
 
  }

到此這篇關(guān)于YII2 全局異常處理深入講解的文章就介紹到這了,更多相關(guān)YII2 全局異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • yii2.0框架實(shí)現(xiàn)上傳excel文件后導(dǎo)入到數(shù)據(jù)庫的方法示例
  • YII2框架中日志的配置與使用方法實(shí)例分析
  • YII2框架中查詢生成器Query()的使用方法示例
  • YII2框架中使用RBAC對模塊,控制器,方法的權(quán)限控制及規(guī)則的使用示例
  • YII2框架中behavior行為的理解與使用方法示例

標(biāo)簽:六安 鶴崗 遼陽 白城 鷹潭 唐山 柳州 克拉瑪依

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《YII2 全局異常處理深入講解》,本文關(guān)鍵詞  YII2,全局,異常,處理,深入,;如發(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 全局異常處理深入講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于YII2 全局異常處理深入講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章