摘要:在通常情況下,會自動將異常信息分為兩種格式來處理或者。而在這之前,它會把基本所有的異常信息先處理為后面講一下常見的異常處理。認證異常處理認證異常是指,這個是由的方法來處理的。
學 Laravel 和 Vuejs,來 codecasts.com 看高質量視頻教程
之前的一篇文章介紹了 Laravel 的異常和日志的一些情況,本文來看看 Laravel 在處理異常返回的時候是什么樣的流程。
在 Laravel 的項目中,出現異常的時候,Laravel 會默認去尋找這個類中是否存在 render() 這個方法,因為這個方法是負責處理渲染異常信息的。所以你要自定義異常的返回信息的話,可以直接在 render() 方法里面實現,這都是看你自己的需求。
在通常情況下,Laravel 會自動將異常信息分為兩種格式來處理:HTML 或者 JSON。而在這之前,它會把基本所有的異常信息先處理為 HTTPException :
if ($e instanceof ModelNotFoundException) { $e = new NotFoundHttpException($e->getMessage(), $e); } elseif ($e instanceof AuthorizationException) { $e = new HttpException(403, $e->getMessage()); } elseif ($e instanceof TokenMismatchException) { $e = new HttpException(419, $e->getMessage()); }
后面講一下 Laravel 常見的異常處理。
認證異常處理認證異常是指IlluminateAuthAuthenticationException,這個是由 AppExceptions 的unauthenticated() 方法來處理的。默認情況下,laravel 會將用戶重定向到 /login URL 中,但是如果你是期望返回 JSON 數據的話,大概返回的信息如下:
{"message" : "Unauthenticated."}表單驗證異常處理
其實在表單驗證不通過的時候,如果我們使用的是傳統的重定向到某個頁面中,我們通常會使用類似下面的代碼來提示錯誤信息:
@if (count($errors) > 0)@endif@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
其實表單驗證出錯的時候也是可以直接使用 JSON 的格式返回的,這個時候需要注意的是,返回的 HTTP 狀態碼是 422 :
{ "message": "The given data failed to pass validation.", "errors": { "name": [ "The name field is required.", "The name field must be a string." ] } }其他的異常處理
目前來說,Laravel 也是直接將大多數的異常轉化為 HTTPException,但是某些情況下我們還是需要自己去處理異常的返回信息,這個時候怎么辦?
使用 expectsJson() !這個方法可以非常easy地實現我們隊 JSON 返回的需求!expectsJson() 主要是通過指定一個特定的 X-Requested-With header 來實現的,如果這個 header 攜帶 XMLHttpRequest 的值的話,Laravel 就認為我們期望返回的是 JSON 格式的異常信息。如果說你使用 Laravel 推薦的 axios 的話,在 assets 下的 bootstrap.js 文件就可以看到,Laravel 官方就會為你指定這個 header:
window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
所以在我們使用expectsJson()返回異常信息的時候,大概的格式是下面這樣:
{ "message": "...", "file": "...", "line": 0, "trace": "..." }
我們在前端處理的時候通常就是取 message 就好了。
那如果說是正常的 HTML 的返回格式呢?這個時候,其實你就可以在 resources/views/errors 定義一個 500.blade.php 文件,Laravel 會默認先展示這個視圖文件的內容。如果沒有自定義,那就返回那個常見的 :
Whoops, looks like something went wrong.總結
Laravel 的異常處理通常會轉化為 HTTPException,而且我們在使用 AJAX 的時候也是可以直接用 expectsJson() 來判斷返回什么格式的信息。這樣基本上解決了 90% 以上的應用場景了。
關注 codecasts 公眾號,定期送書送福利!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/23150.html
摘要:學和,你真應該來的在的應用當中使用異常處理其實是很有用的,它可以追蹤到你的錯誤在哪,并且你的異常信息也是可以直接保存到中的,所以,這樣的機制也給了我們查看異常的便利。自定義其實背后也不是那么神秘,就是使用了社區非常棒的一個日志處理。 學 Laravel 和 Vuejs,你真應該來 codecasts.com 的 在 Laravel 的應用當中使用異常處理其實是很有用的,它可以追蹤到你的...
摘要:請求未通過的驗證時會拋出此異常。異常處理是非常重要但又容易讓開發者忽略的功能,這篇文章簡單解釋了內部異常處理的機制以及擴展異常處理的方式方法。 異常處理是編程中十分重要但也最容易被人忽視的語言特性,它為開發者提供了處理程序運行時錯誤的機制,對于程序設計來說正確的異常處理能夠防止泄露程序自身細節給用戶,給開發者提供完整的錯誤回溯堆棧,同時也能提高程序的健壯性。 這篇文章我們來簡單梳理一下...
摘要:很多開發者在開發過程中都會遇到異常,處理過程大同小異捕獲然后處理,事實上也確實是如此。但本文不打算談太多錯誤與異常的原理,只是從自帶的入手,談一談怎樣用一個更好的方式處理錯誤信息。好處是及時捕獲不可預知的錯誤,給用戶一個更好的體驗。 很多開發者在開發過程中都會遇到異常,處理過程大同小異:捕獲然后處理,事實上也確實是如此。但本文不打算談太多錯誤與異常的原理,只是從laravel自帶的Ex...
摘要:但是,這個響應的狀態碼,是。眾所周知的驗證器會拋出一個異常,此異常在被捕獲后會被的基異常處理器給渲染成響應判斷是否為請求也是在這里做的。 原文地址:https://prinzeugen.net/custom... 不得不說 Laravel 的 Validation 是極好的,非常易于使用,麻麻再也不用擔心我要寫一大堆驗證啦 ~( ^ω^) 但是這個 Validator 有一個神秘的地方...
摘要:是一款即時通信軟件,類似于,它提供開放的,可以調用它向自己團隊中指定的個人或者頻道發送消息,因此用它來進行異常通知是再合適不過的。這樣,當程序中出現異常時,運維能在第一時間收到相關的通知信息,方便及時處理了。 異常處理是軟件開發過程中無法逃避的問題。對于一套設計良好代碼高效的程序,出現異常的可能性會比較低,但這并不意味著不會出現異常,有些異常甚至會引起嚴重的后果,所以如何及時的發現程序...
閱讀 2556·2021-09-22 15:25
閱讀 2963·2021-09-14 18:03
閱讀 1212·2021-09-09 09:33
閱讀 1700·2021-09-07 09:59
閱讀 2930·2021-07-29 13:50
閱讀 1500·2019-08-30 15:44
閱讀 1715·2019-08-29 16:22
閱讀 1287·2019-08-29 12:49