Yii 錯誤處理

2021-06-21 13:36:40 字數 2004 閱讀 9595

在yii中引發異常和在普通php檔案中沒什麼兩樣。你可以使用下面的**來丟擲異常:

throw new exceptionclass('錯誤資訊');

yii定義了兩個異常類:cexception和chttpexception。前者是乙個通用的異常類,而後者用於對終端使用者顯示異常資訊。同時,後者有乙個statuscode屬性來代表http狀態碼。異常的型別決定了顯示效果,下面會細說。

// 如果提交的id是無效的

throw new chttpexception(404,'此頁面不存在');

當乙個錯誤被**給元件cerrorhandler的時候,它會選擇合適的檢視來顯示錯誤。如果這個錯誤要顯示給終端使用者的(比如說乙個chttpexception)那麼會使用名為error***的檢視來顯示錯誤。這個***代表著http錯誤碼(比如說400,404,500等)。如果這是個內部錯誤,應該只能被開發者看到,那麼將使用的檢視名是exception。在後一種中,將會顯示完整的呼叫棧資訊和錯誤行資訊。

資訊:當應用執行在生產模式時,所有的錯誤,包括內部錯誤都會使用檢視error***。這是因為呼叫的棧資訊和錯誤行資訊可能包含一些敏感資訊。這種情況下,開發者應該依靠錯誤日誌來確定錯誤原因。

cerrorhandler會搜尋合適的檢視來顯示錯誤資訊,搜尋的順序如下:

webroot/themes/themename/views/system: 在當前主題檢視下的system目錄中。

webroot/protected/views/system: 在應用的預設檢視的system目錄中。

yii/framework/views: 在yii提供的標準檢視目錄中。

因此,如果你想要自定義錯誤顯示,可以直接在system檢視目錄中或者主題的system檢視目錄中建立乙個視**件。每個視**件都是乙個包含許多html**的普通php檔案。參考框架的view目錄下的檔案,可以獲得更多資訊。

yii也可以使用控制器 動作來處理錯誤顯示。實現的方法是在應用的配置檔案中配置乙個錯誤處理器。

return array(

......

'components'=>array(

'errorhandler'=>array(

'erroraction'=>'site/error',

),),

);

上面的**中,我們配置了cerrorhandler::erroraction屬性,屬性值是乙個路由site/error。這個路由指向sitecontroller中的error。當然,你也可以使用其他的路由。

我們可以這樣來編寫error動作:

public function actionerror()

在這個動作中,首先從cerrorhandler::error中取得詳細的錯誤資訊。如果取得的資訊非空,就使用cerrorhandler::error返回的資訊來渲染error檢視。cerrorhandler::error返回的資訊是乙個陣列,結構如下:

乙個error級別的錯誤資訊會在錯誤發生時候被記錄。如果這個錯誤是由php warning 或 notice引發的,那麼這個訊息將會被記錄在php這個分類中;如果錯誤資訊是由未捕獲的異常所引起的,那麼分類將是exception.exceptionclassname(對於chttpexception來說,它的statuscode也將被追加到分類名中)。開發者可以使用這些記錄來監測應用執行時候的錯誤資訊

MySql錯誤處理 錯誤處理的例子

有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...

MySql錯誤處理(三) 錯誤處理的例子

mysql錯誤處理 三 錯誤處理的例子 有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not foun...

PHP 錯誤處理

在 php 中,預設的錯誤處理很簡單。一條訊息會被傳送到瀏覽器,這條訊息帶有檔名 行號以及一條描述錯誤的訊息。在建立指令碼和 web 應用程式時,錯誤處理是乙個重要的部分。如果您的 缺少錯誤檢測編碼,那麼程式看上去很不專業,也為安全風險敞開了大門。本教程介紹了 php 中一些最為重要的錯誤檢測方法。...