溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

yii2如何實現(xiàn)自定義錯誤處理的方法

發(fā)布時間:2021-01-13 14:41:09 來源:億速云 閱讀:290 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(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)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI