最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

YII2 全局異常處理深入講解

 更新時間:2021年03月19日 17:18:39   作者:若軒啊  
這篇文章主要介紹了YII2 全局異常處理深入講解,文中列舉了異常處理的實例,有感興趣的同學可以學習下

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

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

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

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

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

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

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

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

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

class UserException extends Exception
{
  // HTTP 狀態(tài)碼 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 方法渲染的,所以我們開發(fā)屬于自己的異常處理類的時候可以選擇繼承該類并重寫這個方法。

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

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

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

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

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

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

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

相關文章

  • PHP解碼unicode編碼的中文字符代碼分享

    PHP解碼unicode編碼的中文字符代碼分享

    晚上在抓取某網站數據,結果在數據包中發(fā)現了這么一串編碼的數據:"......\u65b0\u6d6a\u5fae\u535a......", 這其實是中文被unicode編碼后了的數據,我現在就是想解碼出中文來,上度娘搞了半天,試了很多的姿(方)勢(法),終于搞定了。
    2014-08-08
  • Yii框架的路由配置方法分析

    Yii框架的路由配置方法分析

    這篇文章主要介紹了Yii框架的路由配置方法,結合實例形式總結分析了Yii框架路由的常見配置與使用操作技巧,需要的朋友可以參考下
    2019-09-09
  • 使用composer安裝使用thinkphp6.0框架問題【視頻教程】

    使用composer安裝使用thinkphp6.0框架問題【視頻教程】

    這篇文章主要介紹了使用composer安裝使用thinkphp6.0框架問題,通過一個小視頻給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • TP5框架實現簽到功能的方法分析

    TP5框架實現簽到功能的方法分析

    這篇文章主要介紹了TP5框架實現簽到功能的方法,結合實例形式分析了TP5框架實現簽到功能相關數據表建立、以及數據的查詢、判斷、寫入等相關操作技巧,需要的朋友可以參考下
    2020-04-04
  • PHP下用Swoole實現Actor并發(fā)模型的方法

    PHP下用Swoole實現Actor并發(fā)模型的方法

    這篇文章主要介紹了PHP下用Swoole實現Actor并發(fā)模型的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • PHP使用php-resque庫配合Redis實現MQ消息隊列的教程

    PHP使用php-resque庫配合Redis實現MQ消息隊列的教程

    這篇文章主要介紹了PHP使用php-resque庫配合Redis實現MQ消息隊列的教程,將展示php-resque的安裝部署及一個Worker隊列的運行過程,需要的朋友可以參考下
    2016-06-06
  • 使用正則去除php代碼中的注釋方法

    使用正則去除php代碼中的注釋方法

    下面小編就為大家?guī)硪黄褂谜齽t去除php代碼中的注釋方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • php利用header函數下載各種文件

    php利用header函數下載各種文件

    這篇文章主要為大家詳細介紹了php利用header函數下載各種文件的代碼,感興趣的小伙伴們可以參考一下
    2016-08-08
  • php 無限級數據JSON格式及JS解析

    php 無限級數據JSON格式及JS解析

    公司要做個Flash效果的頁面,需要個無限級樹,顯示用戶邀請的好友及其下線,由此就構成了無限級的關系,可能下線有無限多。
    2010-07-07
  • 深入理解PHP中的count函數

    深入理解PHP中的count函數

    下面小編就為大家?guī)硪黄钊肜斫釶HP中的count函數。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05

最新評論

台山市| 霍山县| 晋州市| 宜君县| 连城县| 黄大仙区| 门头沟区| 冀州市| 炉霍县| 新郑市| 叙永县| 申扎县| 甘谷县| 盱眙县| 乌拉特中旗| 邯郸市| 景宁| 沁源县| 涡阳县| 乌什县| 牡丹江市| 理塘县| 黄浦区| 青冈县| 唐海县| 贡觉县| 沧州市| 高雄市| 福鼎市| 普定县| 泰安市| 巩留县| 阿拉善左旗| 张家港市| 齐河县| 襄垣县| 社旗县| 大理市| 珲春市| 泾源县| 荆州市|