更新於 2024/09/30閱讀時間約 3 分鐘

實作 Laravel 自定義的 Exceptions

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

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

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

異常報告(Exception Reporting)

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

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

範例如下

接著設定異常拋出

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

渲染(Rendering)

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

接著設定異常拋出

操作執行後確認異常結果

自定義Exceptions類

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

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

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

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

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

建立共用方法interface

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

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

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

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

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








分享至
成為作者繼續創作的動力吧!
© 2025 vocus All rights reserved.