一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - YII2 全局異常處理深入講解

YII2 全局異常處理深入講解

2021-11-09 15:04若軒啊 PHP教程

這篇文章主要介紹了YII2 全局異常處理深入講解,文中列舉了異常處理的實例,有感興趣的同學可以學習下

 

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

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

YII2 全局異常處理深入講解

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

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

YII2 全局異常處理深入講解

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

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

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

為了讓我們的程序可以簡單的辨別出客戶的不當調用導致的錯誤和服務器的錯誤,我們可以寫一個客戶的異常類。新建 commonUserException.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 的異常處理的渲染是由 vendoryiisoftyii2webErrorHandler.php 中的 renderException 方法渲染的,所以我們開發屬于自己的異常處理類的時候可以選擇繼承該類并重寫這個方法。

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

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

YII2 全局異常處理深入講解

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

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

YII2 全局異常處理深入講解

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

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

YII2 全局異常處理深入講解

到此這篇關于YII2 全局異常處理深入講解的文章就介紹到這了,更多相關YII2 全局異常處理內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/xmwh19996/article/details/106380309

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99久久精品99999久久 | 欧美性bbbbbxxxxxddd| 午夜伦午夜伦锂电影 | 91精品啪在线观看国产线免费 | 精品国产麻豆免费人成网站 | 亚洲图片综合网 | a人片| 国产香蕉一区二区在线网站 | 西西人体大胆啪啪私拍色约约 | 久久久久久久久人体 | 国产精品露脸国语对白手机视频 | 大乳女子一级毛片 | 午夜福利理论片高清在线 | 亚洲精品在线免费观看视频 | 国产欧美日韩成人 | 掀开奶罩边躁狠狠躁软学生 | 免费一级毛片在线播放 | 国产91影院 | 欧美男同猛男 videos 同性 | 久久精品国产在热亚洲 | 婷婷丁香视频 | 草草影院永久在线观看 | 国产午夜亚洲精品 | 思思99热久久精品在2019线 | 日本特黄一级午夜剧场毛片 | 国产大片线上免费观看 | 亚洲精品有码在线观看 | 国产欧美久久久精品影院 | 99精品视频只99有精品 | 亚洲精品国产福利片 | 好大好粗好爽 | 特黄a大片免费视频 | 亚洲国产综合自在线另类 | 朝鲜女人free性xxe | 亚洲高清国产品国语在线观看 | www毛片| 96av视频在线观看 | 精品香蕉99久久久久网站 | 天天拍天天色 | 亚洲AV午夜福利精品香蕉麻豆 | 亚洲AV中文字幕无码久久 |