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

資訊專(zhuān)欄INFORMATION COLUMN

Laravel異常:捕獲,處理和創(chuàng)建

lbool / 1221人閱讀

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

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

異常

先舉個(gè)簡(jiǎn)單的例子,在laravel中,如果一個(gè)Model找不到或者沒(méi)有,很容易就拋出一個(gè)異常,大家常見(jiàn)的Whoops, something went wrong諸如此類(lèi)。這也只是在APP_DEBUG=false的情況下,但這并不能帶給用戶更有用的信息。

User::findOrFail(1);

findOrFail方法在Model沒(méi)有的情況下會(huì)顯示:Sorry, the page you are looking for could not be found.。這是一個(gè)404的錯(cuò)誤頁(yè)面,很多時(shí)候都應(yīng)該這樣返回,如果我們想知道更多有用的信息呢?

try...catch

我在工作中也喜歡用try catch來(lái)處理可能會(huì)拋出的異常,也建議大家這么做。好處是及時(shí)捕獲不可預(yù)知的錯(cuò)誤,給用戶一個(gè)更好的體驗(yàn)。
簡(jiǎn)單的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
執(zhí)行命令

php artisan make:exception UserNotFoundException

系統(tǒng)會(huì)自動(dòng)在Exceptions目錄下創(chuàng)建一個(gè)UserNotFoundException類(lèi),這個(gè)類(lèi)繼承了Exception,這就給了我們一個(gè)自由發(fā)揮的機(jī)會(huì)

namespace AppExceptions;

use Exception;

class UserNotFoundException extends Exception
{
    public function render($request, $e) 
    {
        if ($request->expectsJson()) {
            // 如果是ajax請(qǐng)求...
        }
        
        return redirect()->to("...");
    }
}
判斷異常

Exceptions中的Handle.php文件中,我們看到有個(gè)render()方法,這里就是我們判斷自定義異常的地方

// Handle.php
if ($exception instanceof UserNotFoundException) {
   return $exception->render($exception, $request);
}

可以看到,我們只需要判斷拋出的異常是否是UserNotFoundException的實(shí)例即可。
而在UserNotFoundException類(lèi)中,我們也可以自定義返回的數(shù)據(jù)格式和狀態(tài)碼等等。在工作中,我個(gè)人比較喜歡建一些自定義的異常類(lèi),也會(huì)很好管理。

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

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

相關(guān)文章

  • 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é)給用戶,給開(kāi)發(fā)者提供完整的錯(cuò)誤回溯堆棧,同時(shí)也能提高程序的健壯性。 這篇文章我們來(lái)簡(jiǎn)單梳理一下...

    includecmath 評(píng)論0 收藏0
  • Laravel學(xué)習(xí)筆記之Errors Tracking神器——Sentry

    摘要:中異常處理類(lèi)主要包含兩個(gè)方法和,其中就是主要用來(lái)向第三方發(fā)送異常報(bào)告,這里選擇向這個(gè)神器發(fā)送異常報(bào)告,并使用通知開(kāi)發(fā)人員。通過(guò)也能發(fā)現(xiàn)的執(zhí)行流程。 說(shuō)明:Laravel學(xué)習(xí)筆記之bootstrap源碼解析中聊異常處理時(shí)提到過(guò)Sentry這個(gè)神器,并打算以后聊聊這款神器,本文主要就介紹這款Errors Tracking神器Sentry,Sentry官網(wǎng)有一句話個(gè)人覺(jué)得帥呆了: Stop ...

    xiguadada 評(píng)論0 收藏0
  • Laravel中使用數(shù)據(jù)庫(kù)事務(wù)以及捕獲事務(wù)失敗后的異常

    摘要:在中要想在數(shù)據(jù)庫(kù)事務(wù)中運(yùn)行一組操作,則可以在中使用方法。如果在事務(wù)的閉包內(nèi)拋出異常,事務(wù)將會(huì)被自動(dòng)還原。 Description 在Laravel中要想在數(shù)據(jù)庫(kù)事務(wù)中運(yùn)行一組操作,則可以在 DB facade 中使用 transaction 方法。如果在事務(wù)的閉包內(nèi)拋出異常,事務(wù)將會(huì)被自動(dòng)還原。如果閉包運(yùn)行成功,事務(wù)將被自動(dòng)提交。你不需要擔(dān)心在使用 transaction 方法時(shí)還需要...

    newtrek 評(píng)論0 收藏0
  • laravel中Dingo api如何Custom ExceptionHandler

    摘要:背景在近期使用處理接口時(shí),發(fā)現(xiàn)本身中無(wú)法捕獲異常。后來(lái)查閱資料發(fā)現(xiàn),接管了請(qǐng)求的異常處理。導(dǎo)致無(wú)法自定義錯(cuò)誤返回,很是頭疼。最后在的找到了處理方法。 背景 在近期使用Dingo api處理接口時(shí),發(fā)現(xiàn)laravel本身appExceptionsHandler中無(wú)法捕獲異常。 后來(lái)查閱資料發(fā)現(xiàn),Dingo api接管了api請(qǐng)求的異常處理。導(dǎo)致無(wú)法自定義錯(cuò)誤返回,很是頭疼。 最后在di...

    Ku_Andrew 評(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

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

0條評(píng)論

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