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

主頁 > 知識庫 > 關于ThinkPHP中的異常處理詳解

關于ThinkPHP中的異常處理詳解

熱門標簽:上海做外呼線路的通信公司 四川保險智能外呼系統供應商 地圖標注專員怎么樣 長沙做地圖標注公司 房產中介用的是什么外呼系統 電話機器人銷售主要負責什么 福建銀行智能外呼系統價格 遼寧ai電銷機器人價格 寧波外呼營銷系統

什么是異常

從更加廣泛的角度來看,異常包含兩個方面,一方面是程序執行時由于語法、運行時錯誤等導致的異常,一方面時沒有給予正確的反饋,如客戶端要查詢某個產品,沒有查詢到,我認為這也屬于異常的一種。

第一種異常TP框架本身會在頁面中輸出錯誤信息,但是第二種異常則一般不會輸出任何信息,所以非常不方便調試。

本文將詳細介紹關于ThinkPHP異常處理的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

前提環境

現在 PHP 在很多時候是為前端提供接口,所以我們的異常處理也基于這一點進行處理。

在開發階段,TP 原有的異常處理是在頁面中輸出異常信息,這一點能夠滿足需求,但在生產環境中,則需要以其他方式處理異常。

本文都是針對生產環境的異常處理

AOP 編程

現在在很多語言中,都非常流行 AOP 編程思想,即面向切面編程思想,通俗的說,就是用統一的方式處理問題,而不是用相同的方式分別處理多個問題,對于異常處理來說,就是定義統一的異常信息,用統一的方式處理

大致思路

自定義異常處理類,重寫默認異常處理類的 render 方法,然后配置使用自定義異常處理類處理所有異常

代碼實現

在根目錄下創建目錄 exception,在其下創建ExceptionHandle.php,此類要繼承 handle 類

class ExceptionHandler extends Handle 

創建幾個屬性,用于定義異常信息

// http 錯誤碼 
private $code; 
// 自定義異常信息 
private $msg; 
// 自定義錯誤碼 
private $errorCode; 

覆蓋 Handle 類中的render 方法,當我們在代碼中使用 throw new Exception() 方式拋出異常信息時,其實就是調用了 render 方法,所以我們要重寫此方法,以返回我們自己的信息

public function render(Exception $ex) 
 { 
 return json(['msg'=>"自定義異常信息"]); 
nbsp; } 

下面新建控制器 Product,添加方法,進行測試

public function getProduct($id) 
 { 
 try{ 
  3/0; 
 } 
 catch(Exception $ex){ 
  throw $ex; 
 } 
 } 

然后添加如下路由

Route::get("product/:id","api/v1.Product/getProduct"); 

輸入如下url 測試

http://z.cn/product/2

頁面輸出結果如下

可見,其并沒有執行自定義異常處理函數。

使用自定義的異常處理

在 config.php 中修改如下配置

// 異常處理handle類 留空使用 \think\exception\Handle 
 'exception_handle' => 'app\lib\exception\ExceptionHandler', 

然后再運行

自定義異常處理類

一類異常是用戶行為導致的異常,比如沒有查詢到符合條件的數據(從另一個角度來說,這其實不算異常),一類錯誤是運行時錯誤。而用戶導致的異常可能分為很多種,所以需要自定義相關的類。

首先定義一個父類

class BaseException extends Exception 
{ 
 //http 狀態碼 
 public $code; 
//錯誤具體消息 
 public $msg; 
//自定義錯誤碼 
 public $errorCode; 
 
 //構造函數用于接收傳入的異常信息,并初始化類中的屬性 
 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']; 
  } 
 } 
} 

再定義一個處理找不到產品信息的異常處理類,用來重寫父類中的各個屬性,而且這個類中的屬性信息也可能會被修改,如 msg

class ProductNotFoundException extends BaseException 
{ 
 //http 狀態碼 
 public $code = 404; 
//錯誤具體消息 
 public $msg = "請求的產品不存在"; 
//自定義錯誤碼 
 public $errorCode = 40000; 
} 

處理不同異常

在 render 方法中,根據異常的不同分別處理

//分別處理兩種不容類型異常:1、用戶錯誤 2.代碼與運行時錯誤 
  if ($ex instanceof BaseException) { 
 
  } else { 
  
  } 

說明:在 throw 異常時,會執行 render 函數,同時會將拋出的異常對象復制給參數 $ex,所以可以根據此參數判斷異常類型

現在的關鍵是生產環境,所以希望返回的異常信息,前端人員能夠看懂,而不是像上面那樣在頁面中輸出錯誤信息,還包括堆棧信息等。

那么前前端賀后端人員都能夠看懂的信息一定是 json(當然也可以是xml)了,修改 render 方法

if ($ex instanceof BaseException) { 
   $this->code = $ex->code; 
   $this->msg = $ex->msg; 
   $this->errorCode = $ex->errorCode; 
  } else { 
//這里是在運行時產生的各種異常,所以無法準確輸出異常信息,所以只能統一輸出是服務器錯誤信息 
   $this->code = 500; 
   $this->msg = "服務器內部錯誤"; 
   $this->errorCode = 999; 
  } 

然后以 json 格式返回錯誤信息

$result = [ 
   'msg' => $this->msg, 
   'error_code' => $this->errorCode, 
   'request_url' => request()->url() 
  ]; 
  return json($result,$this->code); 

至此,全局的異常處理就編寫好了,下面在 product.php 中編碼進行測試

public function getProduct($id) 
 { 
  //處理程序運行時錯誤 
  /*try{ 
   3/0; 
  } 
  catch(Exception $ex){ 
   throw $ex; 
  }*/ 
  //處理用戶行為產生的錯誤 
  $error=[ 
   'msg'=>'沒有找到合適的產品' 
  ]; 
  $ex=new ProductNotFoundException($error); 
  throw $ex; 
 } 

提示:生產環境不要忘了將 app_debug 修改為 false

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • 讓whoops幫我們告別ThinkPHP6的異常頁面
  • Thinkphp 在api開發中異常返回依然是html的解決方式
  • 解決thinkphp5未定義變量會拋出異常,頁面錯誤,請稍后再試的問題
  • thinkPHP線上自動加載異常與修復方法實例分析
  • ThinkPHP中自定義錯誤頁面和提示頁面實例
  • TP5(thinkPHP5框架)實現顯示錯誤信息及行號功能的方法
  • ThinkPHP下表單令牌錯誤與解決方法分析
  • ThinkPHP表單令牌錯誤的相關解決方法分析
  • thinkPHP自動驗證、自動添加及表單錯誤問題分析
  • ThinkPHP3.2.3框架實現的空模塊、空控制器、空操作,跳轉到錯誤404頁面圖文詳解
  • Thinkphp5框架異常處理操作實例分析

標簽:澳門 工商登記 宜春 深圳 宿遷 常德 佛山 延安

巨人網絡通訊聲明:本文標題《關于ThinkPHP中的異常處理詳解》,本文關鍵詞  關于,ThinkPHP,中的,異常,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《關于ThinkPHP中的異常處理詳解》相關的同類信息!
  • 本頁收集關于關于ThinkPHP中的異常處理詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 女班长把内裤扒开内裤让我们摸| 曰本丰满肥妇BBwBBw| 亚洲欧美自拍另类| 伊人任线任你躁| 精品国产乱码久久久免费看快餐| 成人福利视频网站| 欧美日韩精品一区二区另类| 精品久久久久久久九九九精品| 中文字幕一精品亚洲无线一区| 法国色情巜做爰狂欲| 水野朝阳爆汗乳中出挤爆中出| 管家婆免费版永久免费吗| 最近中文字幕视频在线资源| 精产嫩模国品一二三区| 忘忧草在线社区www日本-韩国| 日本熟妇无码亚洲成a人片动漫| 国产一区二区三区免费大片天美| 日本美人全捰下身露| 好色tv下载| 日本无码视频一区二区三区| 被黑人猛烈进出到抽搐动态图 | 国产**毛片高清| 女人被扒开腿狂?视频| y11111少妇无码光屁股在线观看| 操处女视频| 免费va国产精品小视频| 白大褂的小妖精| 日本少妇被爽到高潮的动态图 | 国产?无码?高潮?在线| 日日夜夜天天干干| 亚洲色成人网站www在线观看| 成人不卡视频| 99精品久久毛片A片| 欧美一级片在线| 亚洲女同志亚洲女同女播放 | 久久综合草| 同桌上课用手指进去了好爽| 美女极品嫩苞无套内谢| 精品99国产精亚洲天天天天天| 又色又爽视频| 一边啪啪一边呻吟声|