成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Laravel 異常處理

shadajin / 2442人閱讀

摘要:在通常情況下,會(huì)自動(dòng)將異常信息分為兩種格式來(lái)處理或者。而在這之前,它會(huì)把基本所有的異常信息先處理為后面講一下常見(jiàn)的異常處理。認(rèn)證異常處理認(rèn)證異常是指,這個(gè)是由的方法來(lái)處理的。

學(xué) Laravel 和 Vuejs,來(lái) codecasts.com 看高質(zhì)量視頻教程

之前的一篇文章介紹了 Laravel 的異常和日志的一些情況,本文來(lái)看看 Laravel 在處理異常返回的時(shí)候是什么樣的流程。

在 Laravel 的項(xiàng)目中,出現(xiàn)異常的時(shí)候,Laravel 會(huì)默認(rèn)去尋找這個(gè)類(lèi)中是否存在 render() 這個(gè)方法,因?yàn)檫@個(gè)方法是負(fù)責(zé)處理渲染異常信息的。所以你要自定義異常的返回信息的話(huà),可以直接在 render() 方法里面實(shí)現(xiàn),這都是看你自己的需求。

在通常情況下,Laravel 會(huì)自動(dòng)將異常信息分為兩種格式來(lái)處理:HTML 或者 JSON。而在這之前,它會(huì)把基本所有的異常信息先處理為 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 常見(jiàn)的異常處理。

認(rèn)證異常處理

認(rèn)證異常是指IlluminateAuthAuthenticationException,這個(gè)是由 AppExceptionsunauthenticated() 方法來(lái)處理的。默認(rèn)情況下,laravel 會(huì)將用戶(hù)重定向到 /login URL 中,但是如果你是期望返回 JSON 數(shù)據(jù)的話(huà),大概返回的信息如下:

{"message" : "Unauthenticated."}
表單驗(yàn)證異常處理

其實(shí)在表單驗(yàn)證不通過(guò)的時(shí)候,如果我們使用的是傳統(tǒng)的重定向到某個(gè)頁(yè)面中,我們通常會(huì)使用類(lèi)似下面的代碼來(lái)提示錯(cuò)誤信息:

@if (count($errors) > 0)
    
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif

其實(shí)表單驗(yàn)證出錯(cuò)的時(shí)候也是可以直接使用 JSON 的格式返回的,這個(gè)時(shí)候需要注意的是,返回的 HTTP 狀態(tài)碼是 422

{
  "message": "The given data failed to pass validation.",
  "errors": {
    "name": [
        "The name field is required.",
        "The name field must be a string."
    ]
  }
}
其他的異常處理

目前來(lái)說(shuō),Laravel 也是直接將大多數(shù)的異常轉(zhuǎn)化為 HTTPException,但是某些情況下我們還是需要自己去處理異常的返回信息,這個(gè)時(shí)候怎么辦?

使用 expectsJson() !這個(gè)方法可以非常easy地實(shí)現(xiàn)我們隊(duì) JSON 返回的需求!expectsJson() 主要是通過(guò)指定一個(gè)特定的 X-Requested-With header 來(lái)實(shí)現(xiàn)的,如果這個(gè) header 攜帶 XMLHttpRequest 的值的話(huà),Laravel 就認(rèn)為我們期望返回的是 JSON 格式的異常信息。如果說(shuō)你使用 Laravel 推薦的 axios 的話(huà),在 assets 下的 bootstrap.js 文件就可以看到,Laravel 官方就會(huì)為你指定這個(gè) header:

window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";

所以在我們使用expectsJson()返回異常信息的時(shí)候,大概的格式是下面這樣:

{
    "message": "...",
    "file": "...",
    "line": 0,
    "trace": "..."
}

我們?cè)谇岸颂幚淼臅r(shí)候通常就是取 message 就好了。

那如果說(shuō)是正常的 HTML 的返回格式呢?這個(gè)時(shí)候,其實(shí)你就可以在 resources/views/errors 定義一個(gè) 500.blade.php 文件,Laravel 會(huì)默認(rèn)先展示這個(gè)視圖文件的內(nèi)容。如果沒(méi)有自定義,那就返回那個(gè)常見(jiàn)的 :

Whoops, looks like something went wrong.
總結(jié)

Laravel 的異常處理通常會(huì)轉(zhuǎn)化為 HTTPException,而且我們?cè)谑褂?AJAX 的時(shí)候也是可以直接用 expectsJson() 來(lái)判斷返回什么格式的信息。這樣基本上解決了 90% 以上的應(yīng)用場(chǎng)景了。

關(guān)注 codecasts 公眾號(hào),定期送書(shū)送福利!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/23150.html

相關(guān)文章

  • Laravel異常處理和日志

    摘要:學(xué)和,你真應(yīng)該來(lái)的在的應(yīng)用當(dāng)中使用異常處理其實(shí)是很有用的,它可以追蹤到你的錯(cuò)誤在哪,并且你的異常信息也是可以直接保存到中的,所以,這樣的機(jī)制也給了我們查看異常的便利。自定義其實(shí)背后也不是那么神秘,就是使用了社區(qū)非常棒的一個(gè)日志處理。 學(xué) Laravel 和 Vuejs,你真應(yīng)該來(lái) codecasts.com 的 在 Laravel 的應(yīng)用當(dāng)中使用異常處理其實(shí)是很有用的,它可以追蹤到你的...

    vvpvvp 評(píng)論0 收藏0
  • Laravel核心解讀--異常處理

    摘要:請(qǐng)求未通過(guò)的驗(yàn)證時(shí)會(huì)拋出此異常。異常處理是非常重要但又容易讓開(kāi)發(fā)者忽略的功能,這篇文章簡(jiǎn)單解釋了內(nèi)部異常處理的機(jī)制以及擴(kuò)展異常處理的方式方法。 異常處理是編程中十分重要但也最容易被人忽視的語(yǔ)言特性,它為開(kāi)發(fā)者提供了處理程序運(yùn)行時(shí)錯(cuò)誤的機(jī)制,對(duì)于程序設(shè)計(jì)來(lái)說(shuō)正確的異常處理能夠防止泄露程序自身細(xì)節(jié)給用戶(hù),給開(kāi)發(fā)者提供完整的錯(cuò)誤回溯堆棧,同時(shí)也能提高程序的健壯性。 這篇文章我們來(lái)簡(jiǎn)單梳理一下...

    includecmath 評(píng)論0 收藏0
  • Laravel異常:捕獲,處理和創(chuàng)建

    摘要:很多開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中都會(huì)遇到異常,處理過(guò)程大同小異捕獲然后處理,事實(shí)上也確實(shí)是如此。但本文不打算談太多錯(cuò)誤與異常的原理,只是從自帶的入手,談一談怎樣用一個(gè)更好的方式處理錯(cuò)誤信息。好處是及時(shí)捕獲不可預(yù)知的錯(cuò)誤,給用戶(hù)一個(gè)更好的體驗(yàn)。 很多開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中都會(huì)遇到異常,處理過(guò)程大同小異:捕獲然后處理,事實(shí)上也確實(shí)是如此。但本文不打算談太多錯(cuò)誤與異常的原理,只是從laravel自帶的Ex...

    lbool 評(píng)論0 收藏0
  • 自定義 Laravel Validator 所返回的響應(yīng)

    摘要:但是,這個(gè)響應(yīng)的狀態(tài)碼,是。眾所周知的驗(yàn)證器會(huì)拋出一個(gè)異常,此異常在被捕獲后會(huì)被的基異常處理器給渲染成響應(yīng)判斷是否為請(qǐng)求也是在這里做的。 原文地址:https://prinzeugen.net/custom... 不得不說(shuō) Laravel 的 Validation 是極好的,非常易于使用,麻麻再也不用擔(dān)心我要寫(xiě)一大堆驗(yàn)證啦 ~( ^ω^) 但是這個(gè) Validator 有一個(gè)神秘的地方...

    dack 評(píng)論0 收藏0
  • Laravel 中使用 Slack 進(jìn)行異常通知

    摘要:是一款即時(shí)通信軟件,類(lèi)似于,它提供開(kāi)放的,可以調(diào)用它向自己團(tuán)隊(duì)中指定的個(gè)人或者頻道發(fā)送消息,因此用它來(lái)進(jìn)行異常通知是再合適不過(guò)的。這樣,當(dāng)程序中出現(xiàn)異常時(shí),運(yùn)維能在第一時(shí)間收到相關(guān)的通知信息,方便及時(shí)處理了。 異常處理是軟件開(kāi)發(fā)過(guò)程中無(wú)法逃避的問(wèn)題。對(duì)于一套設(shè)計(jì)良好代碼高效的程序,出現(xiàn)異常的可能性會(huì)比較低,但這并不意味著不會(huì)出現(xiàn)異常,有些異常甚至?xí)饑?yán)重的后果,所以如何及時(shí)的發(fā)現(xiàn)程序...

    imccl 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<