laravel中的異常有:1、「E_ERROR」致命運行時錯誤,不可恢復,會導致腳本終止不再繼續運行;2、「E_WARNING」運行時警告「非致命錯誤」;3、 「E_PARSE」編譯時語法解析錯誤;4、「E_CORE_ERROR」初始化啟動過程中發生的致命錯誤;5、「E_COMPILE_ERROR」致命編譯時錯誤;6、「E_RECOVERABLE_ERROR」可被捕捉的致命錯誤。
本教學操作環境:windows7系統、Laravel9版,DELL G3電腦。
laravel中的異常等級
#常數 | 說明 |
---|---|
致命的執行階段錯誤。這類錯誤一般是不可恢復的情況,例如記憶體分配所導致的問題。後果是導致腳本終止不再繼續運作。 | |
執行階段警告 (非致命錯誤)。僅給出提示訊息,但是腳本不會終止運行。 | |
編譯時語法解析錯誤。解析錯誤僅由分析器產生。 | |
執行時間通知。表示腳本遇到可能會表現為錯誤的情況,但是在可以正常運作的腳本裡面也可能會有類似的通知。 | |
在 PHP 初始化啟動過程中發生的致命錯誤。這個錯誤類似 E_ERROR,但是由 PHP 引擎核心產生的。 | |
PHP 初始化啟動過程中發生的警告 (非致命錯誤) 。類似 E_WARNING,但是是 PHP 引擎核心產生的。 | |
致命編譯時錯誤。類似 E_ERROR, 但是是由 Zend 腳本引擎產生的。 | |
編譯時警告 (非致命錯誤)。類似 E_WARNING,但是是由 Zend 腳本引擎產生的。 | |
使用者產生的錯誤訊息。類似 E_ERROR, 但是是由使用者自己在程式碼中使用 PHP 函數 trigger_error () 來產生的。 | |
使用者產生的警告訊息。類似 E_WARNING, 但是是由使用者自己在程式碼中使用 PHP 函數 trigger_error () 來產生的。 | |
使用者產生的通知訊息。類似 E_NOTICE, 但是是由使用者自己在程式碼中使用 PHP 函數 trigger_error () 來產生的。 | |
啟用 PHP 對程式碼的修改建議,以確保程式碼具有最佳的互通性和向前相容性。 | |
可被捕捉的致命錯誤。它表示發生了一個可能非常危險的錯誤,但還沒有導致 PHP 引擎處於不穩定的狀態。如果該錯誤沒有被使用者自訂句柄捕獲 (參見 set_error_handler ()),將成為一個 E_ERROR 從而腳本會終止運行。 | |
#執行階段通知。啟用後將會對在未來版本中可能無法正常運作的程式碼給予警告。 |
Laravel 例外處理
laravel 的例外處理由類別\Illuminate\Foundation\Bootstrap\HandleExceptions::class 完成:
class HandleExceptions { public function bootstrap(Application $app) { $this->app = $app; error_reporting(-1); set_error_handler([$this, 'handleError']); set_exception_handler([$this, 'handleException']); register_shutdown_function([$this, 'handleShutdown']); if (! $app->environment('testing')) { ini_set('display_errors', 'Off'); } } }
異常轉換
laravel 的異常處理均由函數handleException 負責。
PHP7 實作了一個全域的 throwable 接口,原來的 Exception 和部分 Error 都實作了這個接口, 以接口的方式定義了異常的繼承結構。於是,PHP7 中更多的 Error 變成可捕獲的 Exception 返回給開發者,如果不進行捕獲則為 Error ,如果捕獲就變為一個可在程式內處理的 Exception。這些可被捕獲的 Error 通常都是不會對程式造成致命傷害的 Error,例如函數不存在。
PHP7 中,基於 /Error exception,衍生了 5 個新的 engine exception:ArithmeticError / AssertionError / DivisionByZeroError / ParseError / TypeError。在 PHP7 裡,無論是老的 /Exception 還是新的 /Error ,它們都實作了一個共同的 interface: /Throwable。
因此,遇到非Exception 類型的異常,首先要將其轉換為FatalThrowableError 類型:
public function handleException($e) { if (! $e instanceof Exception) { $e = new FatalThrowableError($e); } $this->getExceptionHandler()->report($e); if ($this->app->runningInConsole()) { $this->renderForConsole($e); } else { $this->renderHttpResponse($e); } }
FatalThrowableError 是 Symfony 繼承 \ErrorException 的錯誤異常類別:##rrrere
#異常Log當遇到異常狀況的時候,laravel 首要做的事情就是記錄log,這就是report 函數的作用。
class FatalThrowableError extends FatalErrorException { public function __construct(\Throwable $e) { if ($e instanceof \ParseError) { $message = 'Parse error: '.$e->getMessage(); $severity = E_PARSE; } elseif ($e instanceof \TypeError) { $message = 'Type error: '.$e->getMessage(); $severity = E_RECOVERABLE_ERROR; } else { $message = $e->getMessage(); $severity = E_ERROR; } \ErrorException::__construct( $message, $e->getCode(), $severity, $e->getFile(), $e->getLine() ); $this->setTrace($e->getTrace()); } }
laravel 在Ioc 容器中預設的例外處理類別是Illuminate\Foundation\Exceptions\Handler:
protected function getExceptionHandler() { return $this->app->make(ExceptionHandler::class); }異常頁面展示
記錄log後,就要將異常轉換為頁面向開發者展示異常的信息,以便查看問題的來源:
class Handler implements ExceptionHandlerContract { public function report(Exception $e) { if ($this->shouldntReport($e)) { return; } try { $logger = $this->container->make(LoggerInterface::class); } catch (Exception $ex) { throw $e; // throw the original exception } $logger->error($e); } protected function shouldntReport(Exception $e) { $dontReport = array_merge($this->dontReport, [HttpResponseException::class]); return ! is_null(collect($dontReport)->first(function ($type) use ($e) { return $e instanceof $type; })); } }
對於不同的異常,laravel 有不同的處理,大致有HttpException、HttpResponseException、AuthorizationException、ModelNotFoundException 、AuthenticationException、ValidationException。由於特定的不同異常帶有自身的不同需求,本文不會特別介紹。本文繼續介紹最普通的異常HttpException 的處理:
protected function renderHttpResponse(Exception $e) { $this->getExceptionHandler()->render($this->app['request'], $e)->send(); } class Handler implements ExceptionHandlerContract { public function render($request, Exception $e) { $e = $this->prepareException($e); if ($e instanceof HttpResponseException) { return $e->getResponse(); } elseif ($e instanceof AuthenticationException) { return $this->unauthenticated($request, $e); } elseif ($e instanceof ValidationException) { return $this->convertValidationExceptionToResponse($e, $request); } return $this->prepareResponse($request, $e); } }
對於HttpException 來說,會根據其錯誤的狀態碼,選取不同的錯誤頁面模板,若不存在相關的模板,則會透過SymfonyResponse 來建構異常展示頁面:
protected function prepareResponse($request, Exception $e) { if ($this->isHttpException($e)) { return $this->toIlluminateResponse($this->renderHttpException($e), $e); } else { return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e); } } protected function renderHttpException(HttpException $e) { $status = $e->getStatusCode(); view()->replaceNamespace('errors', [ resource_path('views/errors'), __DIR__.'/views', ]); if (view()->exists("errors::{$status}")) { return response()->view("errors::{$status}", ['exception' => $e], $status, $e->getHeaders()); } else { return $this->convertExceptionToResponse($e); } }
【相關推薦:
laravel影片教學以上是laravel有哪些異常的詳細內容。更多資訊請關注PHP中文網其他相關文章!

ToenhanceGaimentAndCohesionAmongDistributedTeamSbeyondzoom,實施策略:1)組織virtualCoffeebreaksforinfornformalchats,2)useasynchronoustoolslikeslikeslikeslikeslikeslackfornon worksdiscusions,3)3)介紹cristiongamificitygamificationgamificationgamificationgamificationgamificationgamificationwithteamgamegamesorchallengesorchallenges,and4)

Laravel10 IntroducesseveralbreakingChanges:1)Itrequiresphp8.1orhigher,2)TherOuteserviceProviderNowSabootMethodForloadingRoutes,3)thewithtimestamps()MethodOneLoquentRectrationShipsipsississisdeprected,and4))

tomaintainfocusandmotivationInremotework,createStructuredEnvorment,託管式構成,促進性,促進性通過socialescialactionsions andgoalsetting,維持工作勞動生平,維持且蘇聯核酸鹽學。 1)setupadeDedworkspadedworkspacepaceandstickeandsticketicktickticktoorine aroutine。

TofosterCollaboraboraboraboraboraboraboraboraborateMoteTeams,實施策略:1)建立規範的,結構性的通用性在PersonalCheck-Ins,2)Usecollaborativetoolsfortransparenty,3)識別sectizeandcelebrateachivements,和4)FosterActultructulcultultrustrustrustandAdadAptAptaptaptibality。

Laravel的最新版本主要特色包括:1.LaravelOctane提升应用性能,2.改进的模型工厂支持关系和状态定义,3.增强的Artisan命令,4.改进的错误处理,5.新增的Eloquent访问器和修改器。这些功能显著提升了开发效率和应用性能,但需谨慎使用以避免潜在问题。

Tocombatisolationandlonelinessinremotework,companiesshouldimplementregular,meaningfulinteractions,provideequalgrowthopportunities,andusetechnologyeffectively.1)Fostergenuineconnectionsthroughvirtualcoffeebreaksandpersonalsharing.2)Ensureremoteworkers

laravelispularfullull-stackDevelopmentBecapeitOffersAsAseAseAseAseBlendOfbackendEdpoperandPowerandForterFlexibility.1)ITSbackEndCapaPabilities,sightifyDatabaseInteractions.2)thebladeTemplatingEngingEngineAllolowsLows

選擇視頻會議平台的關鍵因素包括用戶界面、安全性和功能。 1)用戶界面應直觀,如Zoom。 2)安全性需重視,MicrosoftTeams提供端到端加密。 3)功能需匹配需求,GoogleMeet適合簡短會議,CiscoWebex提供高級協作工具。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1
好用且免費的程式碼編輯器