摘要:很多開發者在開發過程中都會遇到異常,處理過程大同小異捕獲然后處理,事實上也確實是如此。但本文不打算談太多錯誤與異常的原理,只是從自帶的入手,談一談怎樣用一個更好的方式處理錯誤信息。好處是及時捕獲不可預知的錯誤,給用戶一個更好的體驗。
很多開發者在開發過程中都會遇到異常,處理過程大同小異:捕獲然后處理,事實上也確實是如此。
但本文不打算談太多錯誤與異常的原理,只是從laravel自帶的Exception入手,談一談怎樣用一個更好的方式處理錯誤信息。
先舉個簡單的例子,在laravel中,如果一個Model找不到或者沒有,很容易就拋出一個異常,大家常見的Whoops, something went wrong諸如此類。這也只是在APP_DEBUG=false的情況下,但這并不能帶給用戶更有用的信息。
User::findOrFail(1);
findOrFail方法在Model沒有的情況下會顯示:Sorry, the page you are looking for could not be found.。這是一個404的錯誤頁面,很多時候都應該這樣返回,如果我們想知道更多有用的信息呢?
try...catch我在工作中也喜歡用try catch來處理可能會拋出的異常,也建議大家這么做。好處是及時捕獲不可預知的錯誤,給用戶一個更好的體驗。
簡單的demo,如下
try { $user = User::findOrFail(1); } catch (ModelNotFoundException $exception) { return back()->withError($exception->getMessage())->withInput(); }
我們也可以這樣:
if (! User::find(1)) { throw new UserNotFoundException("...", 404); }自定義異常
Laravel框架允許我們自定義exception
執行命令
php artisan make:exception UserNotFoundException
系統會自動在Exceptions目錄下創建一個UserNotFoundException類,這個類繼承了Exception,這就給了我們一個自由發揮的機會
namespace AppExceptions; use Exception; class UserNotFoundException extends Exception { public function render($request, $e) { if ($request->expectsJson()) { // 如果是ajax請求... } return redirect()->to("..."); } }判斷異常
在Exceptions中的Handle.php文件中,我們看到有個render()方法,這里就是我們判斷自定義異常的地方
// Handle.php if ($exception instanceof UserNotFoundException) { return $exception->render($exception, $request); }
可以看到,我們只需要判斷拋出的異常是否是UserNotFoundException的實例即可。
而在UserNotFoundException類中,我們也可以自定義返回的數據格式和狀態碼等等。在工作中,我個人比較喜歡建一些自定義的異常類,也會很好管理。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31331.html
摘要:請求未通過的驗證時會拋出此異常。異常處理是非常重要但又容易讓開發者忽略的功能,這篇文章簡單解釋了內部異常處理的機制以及擴展異常處理的方式方法。 異常處理是編程中十分重要但也最容易被人忽視的語言特性,它為開發者提供了處理程序運行時錯誤的機制,對于程序設計來說正確的異常處理能夠防止泄露程序自身細節給用戶,給開發者提供完整的錯誤回溯堆棧,同時也能提高程序的健壯性。 這篇文章我們來簡單梳理一下...
摘要:中異常處理類主要包含兩個方法和,其中就是主要用來向第三方發送異常報告,這里選擇向這個神器發送異常報告,并使用通知開發人員。通過也能發現的執行流程。 說明:Laravel學習筆記之bootstrap源碼解析中聊異常處理時提到過Sentry這個神器,并打算以后聊聊這款神器,本文主要就介紹這款Errors Tracking神器Sentry,Sentry官網有一句話個人覺得帥呆了: Stop ...
摘要:在中要想在數據庫事務中運行一組操作,則可以在中使用方法。如果在事務的閉包內拋出異常,事務將會被自動還原。 Description 在Laravel中要想在數據庫事務中運行一組操作,則可以在 DB facade 中使用 transaction 方法。如果在事務的閉包內拋出異常,事務將會被自動還原。如果閉包運行成功,事務將被自動提交。你不需要擔心在使用 transaction 方法時還需要...
摘要:背景在近期使用處理接口時,發現本身中無法捕獲異常。后來查閱資料發現,接管了請求的異常處理。導致無法自定義錯誤返回,很是頭疼。最后在的找到了處理方法。 背景 在近期使用Dingo api處理接口時,發現laravel本身appExceptionsHandler中無法捕獲異常。 后來查閱資料發現,Dingo api接管了api請求的異常處理。導致無法自定義錯誤返回,很是頭疼。 最后在di...
摘要:但是,這個響應的狀態碼,是。眾所周知的驗證器會拋出一個異常,此異常在被捕獲后會被的基異常處理器給渲染成響應判斷是否為請求也是在這里做的。 原文地址:https://prinzeugen.net/custom... 不得不說 Laravel 的 Validation 是極好的,非常易于使用,麻麻再也不用擔心我要寫一大堆驗證啦 ~( ^ω^) 但是這個 Validator 有一個神秘的地方...
閱讀 3686·2021-11-12 10:36
閱讀 3831·2021-09-22 15:48
閱讀 3543·2019-08-30 15:54
閱讀 2593·2019-08-29 16:44
閱讀 2364·2019-08-29 16:08
閱讀 2409·2019-08-29 16:06
閱讀 1281·2019-08-29 15:21
閱讀 3171·2019-08-29 12:39