<分区>
在 Laravel 中,只要出现错误,即使是轻微的 NOTICES、WARNINGS 和 DEPRECATED 错误,我都会得到完整的调试信息,从而终止应用程序。在我的 App.config 中,我已将 debug => false 设置为“糟糕,看起来出了点问题”。
我怎样才能关闭除 Laravel 之外的所有错误处理,以获取不会中断整个应用程序流程的正常 PHP 错误?
<分区>
在 Laravel 中,只要出现错误,即使是轻微的 NOTICES、WARNINGS 和 DEPRECATED 错误,我都会得到完整的调试信息,从而终止应用程序。在我的 App.config 中,我已将 debug => false 设置为“糟糕,看起来出了点问题”。
我怎样才能关闭除 Laravel 之外的所有错误处理,以获取不会中断整个应用程序流程的正常 PHP 错误?
最佳答案
如果您不想因某些 PHP 错误类型而中断您的工作流程,则需要禁用 Laravel 为这些错误注册的错误处理程序。
Laravel 在 Illuminate/Foundation/Bootstrap/HandleExceptions.php
中注册了它的错误处理。此 Bootstrap 是您的 Http 内核处理请求时调用的多个 Bootstrap 之一。
虽然有几种方法可以做您想做的事,但我认为最简单的方法是处理调用此 Bootstrap 后触发的事件。在事件处理程序中,您可以为您不希望 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);
}
});
}
);
关于php - Laravel 关闭异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41091942/