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