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');
}
}