在Yii2 使用中,我們發現一但程式出現錯誤,Yii2 就能自動顯示其專用的錯誤提示介面,和我們寫原生態時出現的錯誤提示介面完全不一樣。
它究竟是怎麼做到的呢:是在哪裡設定監聽的?亦或在哪裡用的try catch? 」。 (建議學習:yii架構)
#時自動上呼叫程式有自己使用時, ,在其啟動的時候,使用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自訂錯誤處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!