錯誤處理¶
CodeIgniter 透過 Exceptions 將錯誤報告建構到你的系統中,包括 SPL 異常集合 以及框架提供的一些自定義異常。根據你的環境設定,當一個錯誤或異常被拋出時,除非應用程式是在正式環境下執行,不然預設將會提示一個詳細的錯誤報告。在正式環境下,將會顯示一個通用的錯誤畫面,保持最佳的使用體驗。
使用例外¶
本節是為新手程式設計師或是沒有使用過 exceptions 的開發者提供一個快速的概述。
「異常(exceptions)」指的是當某個異常被「拋出」時發生的簡單事件,這將會讓程式腳本停止當下的流程,然後執行錯誤處理程序,錯誤處理程序會顯示相應的錯誤頁面:
throw new \Exception("Some message goes here");
如果你正在呼叫一個可能會拋出異常的方法,你可以使用 try/catch
來捕捉這個異常:
try {
$user = $userModel->find($id);
} catch (\Exception $e) {
die($e->getMessage());
}
在這個例子中,我們將會捕捉所有類型的異常。如果 $userModel
拋出異常,則會被捕捉並執行 catch 內的程式碼。在這個例子中,腳本將會中止生命週期,回傳由 UserModel
所定義的錯誤訊息。
若是我們只想監視特定類型的異常,比如 UnknownFileException ,我們可以在 catch 參數中指定。任何被拋出且不是被捕捉的異常子類別,都將被傳遞給錯誤處理程序進行處理:
catch (\CodeIgniter\UnknownFileException $e) {
// do something here...
}
這對於親自處理錯誤或在腳本結束之前執行清除很方便。如果你想讓錯誤處理程序正常執行,你可以在 catch 中拋出一個新的異常。
catch (\CodeIgniter\UnknownFileException $e) {
// do something here...
throw new \RuntimeException($e->getMessage(), $e->getCode(), $e);
}
組態設定¶
在預設的情形下, Codeigniter 將顯示 development
(開發) 和 testing
(測試) 環境中所有的錯誤,而不會顯示錯誤在 production
(上線) 環境中。你可以透過設定 .env
檔案中的 CI_ENVIRONMENT
來更改這個設定 。
重要
寫入日誌這個行為並不會因為禁用錯誤報告而停止。
自定義例外¶
以下是自定義的例外情況:
找不到頁面例外¶
這是用來提示「 404 找不到頁面」的錯誤,當拋出時,系統將會顯示在 /app/views/errors/html/error_404.php
中找到的視圖。你應該為你的網站訂製所有錯誤的視圖。如果在 Config/Routes.php
中,你覆蓋了原有的 404 設定,那麼你的設定將會被呼叫,而不是標準的 404 頁面:
if (! $page = $pageModel->find($id))
{
throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound();
}
你可以將訊息傳遞到異常中,替換掉預設 404 所顯示的訊息。
設定例外¶
當組態設定類別中的值無效,或者設定類別的類型不對等的情快下,應該使用這個異常:
throw new \CodeIgniter\Exceptions\ConfigException();
這個異常機會給予你一個 500 HTTP 狀態瑪,以及 3 退出碼 。