您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關yii2如何實現自定義錯誤處理的方法的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
在 Yii2 使用中,我們發現一但程序出現錯誤,Yii2 就能自動顯示其專用的錯誤提示界面,和我們寫原生態時出現的錯誤提示界面完全不一樣。
它究竟是怎么做到的呢:是在哪里設置監聽的?亦或在哪里用的try catch?”。 其實 PHP 有自己專用的錯誤處理 API, 當程序出現問題時,可以自動調用指定函數。而 Yii2 正是利用這一點,在其啟動的時候,使用 PHP 內置的 set_error_handler 將自己的錯誤處理注冊進步并關閉 PHP 自身的錯誤顯示。
Yii2 錯誤自定義處理
在 官方教程 中,它告訴我們要開啟自定義的錯誤,需要進行如下配置組件:
return [ // ... 'components' => [ // ... 'errorHandler' => [ 'errorAction' => 'site/error', ], ] // ... ];
Yii2 錯誤核心處理方法
在 Yii2 錯誤自定義處理 中我們了解了 Yii2 錯誤注冊的原理并知道錯誤的發生后,Yii2 將調用 yii\web\ErrorHandler 類對象的 handleException 和 handleError 方法。
其實 yii\web\ErrorHandler 類中并沒有 handleException 和 handleError 方法,但是在其基類 yii\base\ErrorHandler 有,這兩個函數最終都將調用 yii\web\ErrorHandler 的 renderException 方法,代碼如下:
# yii\web\ErrorHandler /** * Renders the exception. * @param \Exception $exception the exception to be rendered. */ protected function renderException($exception) { // ... // 注意:控制錯誤是否能自定義的關鍵 // !YII_DEBUG 表示了如果你現在是在 Debug 模式下,那么不能自定義錯誤 // 即使你配置了組件的 'errorHandler' => ['errorAction' => 'site/error'] 參數 $useErrorView = $response->format === Response::FORMAT_HTML && (!YII_DEBUG || $exception instanceof UserException); // 傳遞到自定義錯誤處理方法 if ($useErrorView && $this->errorAction !== null) { $result = Yii::$app->runAction($this->errorAction); if ($result instanceof Response) { $response = $result; } else { $response->data = $result; } } // ... }
在最終的錯誤顯示方法 renderException 我們可以看出:自定義的錯誤需要在非 DEBUG 模式下才能生效
感謝各位的閱讀!關于“yii2如何實現自定義錯誤處理的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。