Laravel关闭异常处理程序

时间:2016-12-11 22:38:55

标签: php laravel

在Laravel中,每当出现错误,即使是轻微的NOTICES,WARNINGS和DEPRECATED erros,我都会得到完整的调试信息,这会导致应用程序失败。在我的App.config中,我已经调试了debug =>是的,我收到了“哎呀”的消息,看起来出了问题。'

如何关闭所有错误处理,但Laravel只能获得不会中断整个应用程序流的正常PHP错误?

3 个答案:

答案 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 。最简单的方法是找到第三方错误处理程序供应商,然后修改它以接管所有错误处理程序而不是阻止呈现。