91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

YII2全局異常處理的示例分析

發布時間:2021-03-20 13:47:05 來源:億速云 閱讀:259 作者:小新 欄目:開發技術

這篇文章主要介紹了YII2全局異常處理的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

首先,我們必須理性認識到,任何一個即使穩定的系統中也是存在著大量的 bug,不管是因為什么原因導致的錯誤,我們都是需要做好防范的,最好的結果當然是將異常糾正過來,返回客戶端一個正確的響應結果,但絕大多數情況下是沒辦法返回正常結果的,只能返回一個客戶端一個異常的信息。
處理異常的方式,通常分為:

  1. 記錄日志

  2. 修復異常

  3. 返回客戶端錯誤

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

YII2全局異常處理的示例分析

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

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

YII2全局異常處理的示例分析

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

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

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

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

class UserException extends Exception
{
  // HTTP 狀態碼 404,200
  /**
   * @var int|mixed
   */
  public $code = 400;
  // 錯誤具體信息
  /**
   * @var mixed|string
   */
  public $msg = '參數錯誤';
  // 自定義的錯誤碼
  /**
   * @var int|mixed
   */
  public $errorCode = 10000;
 
  /**
   * UserException constructor.
   * @param $params
   */
  public function __construct($params=[]) {
    // 如果傳過來的不是數組則不進行對象初始化
    if (!is_array($params)) {
      return;
    }
    // 判斷數組有沒有該鍵值
    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 方法渲染的,所以我們開發屬于自己的異常處理類的時候可以選擇繼承該類并重寫這個方法。

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

當我們開啟 debug 模式時拋出錯誤:

YII2全局異常處理的示例分析

關閉 debug 模式,拋出服務器端異常:

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

YII2全局異常處理的示例分析

關閉 debug 模式,拋出客戶端異常:

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

YII2全局異常處理的示例分析

感謝你能夠認真閱讀完這篇文章,希望小編分享的“YII2全局異常處理的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尼木县| 旬阳县| 建始县| 乐业县| 巴林左旗| 四会市| 富宁县| 宁阳县| 兴国县| 淮安市| 抚顺市| 视频| 京山县| 武夷山市| 阳城县| 汤阴县| 根河市| 烟台市| 和龙市| 成安县| 南岸区| 沙湾县| 方山县| 安徽省| 贵州省| 延安市| 论坛| 克什克腾旗| 太康县| 微山县| 山东省| 阜阳市| 呼伦贝尔市| 大丰市| 收藏| 潞西市| 海盐县| 天祝| 兴安县| 赤壁市| 英超|