實作 Laravel 自定義的 Exceptions

2023/10/01閱讀時間約 3 分鐘

在撰寫專案時,有時候可能需要做一些特定Exceptions 來拋出error message的情況,而在不同公司任職,大家配置的流程可能就有些不同,這邊將簡單練習如何配置自定義的Exception

根據Laravel 功能就有分成異常報告(Exception Reporting)渲染(Rendering)兩種,是與處理異常(Exception Handling)相關的兩個重要概念。而在app/Exceptions/Handler.php類中一起使用,作為自定義錯誤處理。

以下簡單說明 Reporting 及 Rendering 使用方式

異常報告(Exception Reporting)

異常報告是指在應用程序運行時當異常(例如,未捕獲的異常)發生時,Laravel將異常信息記錄下來,以便後續的故障排除和記錄。

而Laravel通常使用Monolog或其他日誌庫來記錄這些異常。當異常發生時,Laravel會將相關信息(如異常消息、堆棧跟蹤等)寫入日誌文件,您可以設置日誌的目標、級別和格式等配置選項,以自訂異常報告的行為。

範例如下

raw-image

接著設定異常拋出

raw-image

操作執行後確認異常有無寫入log,laravel log檔案位置在storage/logs/laravel.log,這邊可以看到拋出error跟紀錄。

raw-image
raw-image

渲染(Rendering)

render方法允許您自訂異常的響應,例如返回一個錯誤頁面、JSON響應或其他自訂響應。下列為定義一個render方法,我們可以使用$this->reportable來測試error message,這邊我使用HttpExcepition配置JSON response

raw-image

接著設定異常拋出

raw-image

操作執行後確認異常結果

raw-image

自定義Exceptions類

Laravel 允許我們用於處理特定錯誤或異常情況下額外創建特定的Exceptions,以便在應用程式中更好地控制錯誤和異常的處理。

例如我們可以創建一個自定義的ApiExceptions類,繼承HttpException方法

raw-image

接著使用自定義的ApiException 並傳入自定義的錯誤訊息跟statusCode

raw-image

接下來看測試error message是否正常丟出

raw-image

而當我們專案有許多需要根據不同 Api 路由檔定義相同方法而不同的錯誤異常結果,我們可以修改成以下方式

建立共用方法interface

raw-image

定義特定的Exceptions,命名一個CourseException

raw-image

接著設定異常拋出,使用CourseExceptionthrowPasswordErrorException方法,可以根據自定義的status code 及message 拋出

raw-image

附上自定義的翻譯檔,位於lang/en/error.php

raw-image

接下來看測試error message是否正常丟出

raw-image

總結:以上是針對配置自定義的Exception學習筆記,根據公司專案要求,可選擇簡單配置或是可擴展的自定義Exception類,透過實作也比較能釐清哪些實作方式更適合XDDDD








13會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
發表第一個留言支持創作者!