在Laravel中,無論何時出現錯誤,即使是次要的NOTICES,WARNINGS和DEPRECATED erros,我都可以獲得完整的調試信息,從而終止應用程序。在我的App.config中,我調試了debug => false,並且收到了'Whoops'的消息,看起來像是出錯了。Laravel關掉異常處理程序
如何關閉所有錯誤處理,但Laravel只是得到不會中斷整個應用程序流程的正常PHP錯誤?
在Laravel中,無論何時出現錯誤,即使是次要的NOTICES,WARNINGS和DEPRECATED erros,我都可以獲得完整的調試信息,從而終止應用程序。在我的App.config中,我調試了debug => false,並且收到了'Whoops'的消息,看起來像是出錯了。Laravel關掉異常處理程序
如何關閉所有錯誤處理,但Laravel只是得到不會中斷整個應用程序流程的正常PHP錯誤?
App\Exceptions\Handler.php
文件就是爲此而構建的。
在public function render()
方法,可以捕獲應用程序和執行某些重定向/網頁瀏覽,如果你選擇:
舉例來說,你可以在你的應用程序捕獲HttpException
的,然後如果你想返回錯誤頁面:
public function render($request, Exception $e)
{
//other stuff
if ($e instanceof HttpException) {
return view('errors.general')->withErrors([
'message' => 'The application encountered an error!'
]);
}
return parent::render($request, $exception);
}
如果你不想打斷你對某種PHP錯誤類型的工作流程,你需要禁用通過Laravel這些錯誤登記錯誤處理程序。
Laravel在Illuminate/Foundation/Bootstrap/HandleExceptions.php
中註冊其錯誤處理。該引導程序是您的Http內核處理請求時調用的幾個引導程序之一。
雖然有兩種方法可以做你想做的事情,但我認爲最簡單的方法就是處理在引導程序被調用後觸發的事件。在事件處理程序中,您可以重置錯誤處理程序以查找您不希望Laravel處理的錯誤。
在你bootstrap/app.php
文件,添加以下行返回$app
權利之前:
$app->afterBootstrapping(
'Illuminate\Foundation\Bootstrap\HandleExceptions',
function ($app) {
set_error_handler(function ($level, $message, $file = '', $line = 0, $context = []) {
// Check if this error level is handled by error reporting
if (error_reporting() & $level) {
// Return false for any error levels that should
// be handled by the built in PHP error handler.
if ($level & (E_WARNING | E_NOTICE | E_DEPRECATED)) {
return false;
}
// Throw an exception to be handled by Laravel for all other errors.
throw new ErrorException($message, 0, $level, $file, $line);
}
});
}
);
說起來,投票的答案是什麼,他問相反。 據我所知,沒有辦法分開錯誤報告和laravel接管渲染屏幕。我一直在瀏覽Laravel 5的代碼,並沒有找到一種方法來使用它們的設置將它們分開。
你可以編寫自己的庫來完全接管所有的錯誤處理並刪除所有的laravels內部跟蹤,但是在你需要原始頁面錯誤的情況下,你必須確保將它傳遞迴laravel處理。最簡單的方法是找到第三方錯誤處理程序供應商,然後修改它來接管所有錯誤處理程序並且不阻止呈現。
讀這個問題,然後你的綽號讓我咯咯笑,因爲它正是我讀過它後想的:)無論如何,+1從我的正確答案。 –