[CodeIgniter4]-錯誤處理
- 2020 年 3 月 5 日
- 筆記
錯誤處理
CodeIgniter 通過 SPL collection 和一些框架內自定義異常來生成系統錯誤報告。錯誤處理的行為取決於你部署環境的設置,當一個錯誤或異常被拋出時,只要應用不是在 production
環境下運行,就會默認展示出詳細的錯誤報告。在這種情況下,應為用戶顯示一個更為通用的資訊來保證最佳的用戶體驗。
- 使用異常處理
- 配置
- 自定義異常
- PageNotFoundException
- ConfigException
- UnknownFileException
- UnknownClassException
- UnknownMethodException
- UserInputException
- DatabaseException
使用異常處理
本節為新手程式設計師或沒有多少異常處理使用經驗的開發人員做一個簡單概述。
異常處理是在異常被」拋出」的時候產生的事件。它會暫停當前腳本的執行,並將捕獲到的異常發送到錯誤處理程式後顯示適當的錯誤提示頁
throw new Exception("Some message goes here");
如果你調用了一個可能會產生異常的方法,你可以使用 try/catch block
去捕獲異常
try { $user = $userModel->find($id); } catch (Exception $e) { die($e->getMessage()); }
如果 $userModel
拋出了一個異常,那麼它就會被捕獲,並執行 catch 程式碼塊內的語句。在這個樣例中,腳本終止並輸出了 UserModel
定義的錯誤資訊。
在這個例子中,我們可以捕捉任意類型的異常。如果我們僅僅想要監視特定類型的異常,比如 UnknownFileException,我們就可以把它在 catch 參數中指定出來。這樣一來,其它異常和非監視類型子類的異常都會被傳遞給錯誤處理程式
catch (CodeIgniterUnknownFileException $e) { // do something here... }
這便於你自己進行錯誤處理或是在腳本結束前做好清理工作。如果你希望錯誤處理程式正常運行,可以在 catch 語句塊中再拋出一個新的異常
catch (CodeIgniterUnknownFileException $e) { // do something here... throw new RuntimeException($e->getMessage(), $e->getCode(), $e); }
配置
默認情況下,CodeIgniter 將在 development
和 testing
環境中展示所有的錯誤,而在 production
環境中不展示任何錯誤。你可以在主 index.php
文件的頂部找到環境配置部分來更改此設置。
重要
如果發生錯誤,禁用錯誤報告將不會阻止日誌的寫入。
自定義異常
下列是可用的自定義異常:
PageNotFoundException
這是用來聲明 404 ,頁面無法找到的錯誤。當異常被拋出時,系統將顯示後面的錯誤模板 /application/views/errors/html/error_404.php
。你應為你的站點自定義所有錯誤視圖。如果在 Config/Routes.php
中,你指定了404 的重寫規則,那麼它將代替標準的 404 頁來被調用
if (! $page = $pageModel->find($id)) { throw new CodeIgniterPageNotFoundException(); }
你可以通過異常傳遞消息,它將在 404 頁默認消息位置被展示。
ConfigException
當配置文件中的值無效或 class 類不是正確類型等情況時,請使用此異常
throw new CodeIgniterConfigException();
它將 HTTP 狀態碼置為 500,退出狀態碼被置為 3.
UnknownFileException
在文件沒有被找到時,請使用此異常
throw new CodeIgniterUnknownFileException();
它將 HTTP 狀態碼置為 500,退出狀態碼被置為 4.
UnknownClassException
當一個類沒有被找到時,請使用此異常
throw new CodeIgniterUnknownClassException($className);
它將 HTTP 狀態碼置為 500,退出狀態碼被置為 5.
UnknownMethodException
當一個類的方法不存在時,請使用此異常
throw new CodeIgniterUnknownMethodException();
它將 HTTP 狀態碼置為 500,退出狀態碼被置為 6.
UserInputException
當用戶的輸入無效時,請使用此異常
throw new CodeIgniterUserInputException();
它將 HTTP 狀態碼置為 500,退出狀態碼被置為 7.
DatabaseException
當產生如連接不能建立或連接臨時丟失的資料庫錯誤時,請使用此異常
throw new CodeIgniterDatabaseException();
它將 HTTP 狀態碼置為 500,退出狀態碼被置為 8.