hyperf中如何实现异常处理

>为什么要使用异常

在 Hyperf 里,业务代码都运行在 Worker 进程 上,也就意味着一旦任意一个请求的业务存在没有捕获处理的异常的话,都会导致对应的 Worker 进程 被中断退出,这对服务而言也是不能接受的,捕获异常并输出合理的报错内容给客户端也是更加友好的。
我们可以通过对各个 server 定义不同的 异常处理器(ExceptionHandler),一旦业务流程存在没有捕获的异常,都会被传递到已注册的 异常处理器(ExceptionHandler) 去处理。

>如何实现

创建异常类

```
message = $message;
$this->code = $code;
$this->data = $data;
}
}
```

定义异常处理器

```
$throwable->getCode(),
'msg' => $throwable->getMessage(),
'data' => $throwable->data,
], JSON_UNESCAPED_UNICODE);

// 阻止异常冒泡
$this->stopPropagation();
return $response->withStatus(200)->withBody(new SwooleStream($data));
}

// 交给下一个异常处理器
return $response;
}

/**
* 判断该异常处理器是否要对该异常进行处理
*/
public function isValid(Throwable $throwable): bool
{
return true;
}
}
```

注册异常处理器`config/autoload/exceptions.php`

```
\App\Exception\Handler\FooExceptionHandler::class,
```

创建控制器

```
'right!'];
throw new FooException('ok', 200, $msg);
return;
}
}
```

参考`http://blog.95shouyou.com/?id=18`

    A+
发布日期:2021年12月31日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: