禁止抛出 E_USER_WARNING 异常

mpe*_*pen 7 php exception laravel laravel-5

当我这样做时,Laravel 返回 500:

trigger_error("Some message", E_USER_WARNING);
Run Code Online (Sandbox Code Playgroud)

我需要它出错,但我确实希望它运行\App\Exceptions\Handler::report,将警告记录到 Sentry。

如何在 Laravel 5.2 中禁止将警告和错误转变为异常?

Fuz*_*ree 6

您可以编辑 laravel 的错误处理程序以仅报告警告HandleExceptions.php

public function handleError($level, $message, $file = '', $line = 0, $context = [])
{
    $exception = new ErrorException($message, 0, $level, $file, $line);

    if (E_USER_WARNING & $level) {
        $this->getExceptionHandler()->report($exception);
    }
    elseif (error_reporting() & $level) {
        throw $exception;
    }
}
Run Code Online (Sandbox Code Playgroud)

用户警告:修改供应商代码通常不是一个好主意。

HandleExceptions您可以通过扩展类并在中注册新类来避免修改供应商代码Kernel.php

MyHandleExceptions extends HandleExceptions {
    public function handleError($level, $message, $file = '', $line = 0, $context = [])
    {   
        if (E_USER_WARNING & $level) {
            $this->getExceptionHandler()->report(new ErrorException($message, 0, $level, $file, $line));
        }
        else {
            return parent::handleError($level, $message, $file, $line, $context);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)