Laravel8 注册自定义异常处理程序

2021-08-10

在 Laravel8 版本之前,app/Exceptions.Handler.php 中这段代码工作正常:

use Illuminate\Validation\ValidationException;

public function render($request, Exception $exception)
{
    if (Request()->is("api/*")) {
        if ($e instanceof ValidationException) {
            $message = array_values($e->errors())[0][0];
            return jsonFailed($message);
        }
        return jsonFailed('Service Error');
    }
}

Laravel8 中所有异常都是由 App\Exceptions\Handler 类处理。此类包含一个 register 方法,可以在其中注册自定义异常报告程序和渲染器回调。

如果需要使用不同的方式来报告不同的异常,您可以使用 reportable 方法来注册一个闭包,当需要报告给定的异常的时候便会执行它。 Laravel 将通过检查闭包的类型提示来判断闭包报告的异常类型。

上述是 Laravel8 文档介绍,与之前版本不同的是,使用 reportable 方法注册一个闭包去处理异常。

Laravel8 代码改动示例:

use Illuminate\Validation\ValidationException;

public function register()
{
    $this->reportable(function (Throwable $e) {

    });

    $this->renderable(function (Throwable $e) {
        return $this->handleException($e);
    });
}

public function handleException(Throwable $e) {
    if (Request()->is("api/*")) {
        if ($e instanceof ValidationException) {
            $message = array_values($e->errors())[0][0];
            return jsonFailed($message);
        }
        return jsonFailed('Service Error');
    }
}

参考信息

© 2021 Lh1010 - 豫ICP备16115435号-1