在Laravel中,每当出现错误,即使是轻微的NOTICES,WARNINGS和DEPRECATED erros,我都会得到完整的调试信息,这会导致应用程序失败。在我的App.config中,我已经调试了debug =>是的,我收到了“哎呀”的消息,看起来出了问题。'
如何关闭所有错误处理,但Laravel只能获得不会中断整个应用程序流的正常PHP错误?
答案 0 :(得分:2)
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);
}
答案 1 :(得分:2)
如果您不想中断某些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);
}
});
}
);
答案 2 :(得分:1)
这个上升的答案与他所要求的相反。 据我所知,没有办法分离错误报告和laravel接管屏幕的渲染。我一直在查看Laravel 5代码,但还没有找到一种方法将它们分开使用它们的设置。
您可以编写自己的库来完全接管所有错误处理并删除所有laravels内部跟踪,但是在您需要orig页面错误处理的情况下,您必须确保将其传递回laravel 。最简单的方法是找到第三方错误处理程序供应商,然后修改它以接管所有错误处理程序而不是阻止呈现。