Closed krissss closed 2 years ago
你这个是如何后期扩展?
项目中新建一个handler,然后继承你的这个,然后按需修改对应的方法。 比如我想response响应xml,只需要覆盖buildResponse方法; 再比如我想扩展其他Exception的响应,我只要覆盖solveExtraException; 再比如我要异常推送微信消息,我可以覆盖triggerNotifyEvent。
因为你原来的写法要扩展的话只能整个重写
继承和使用的步骤是否可以提供一下,需要写文档
@Tinywan
<?php
namespace support;
use Illuminate\Validation\ValidationException;
use Throwable;
use Tinywan\ExceptionHandler\Handler;
use Webman\Http\Response;
class ErrorHandler extends Handler
{
/**
* @inheritDoc
*/
protected function solveExtraException(Throwable $e): void
{
// 当前项目下的异常扩展
if ($e instanceof ValidationException) {
$this->exceptionInfo['errorMsg'] = $e->validator->errors()->first();
$this->exceptionInfo['statusCode'] = 422;
return;
}
parent::solveExtraException($e);
}
/**
* @inheritDoc
*/
protected function triggerNotifyEvent(Throwable $e): void
{
// 触发其他错误推送渠道
parent::triggerNotifyEvent($e);
}
/**
* @inheritDoc
*/
protected function buildResponse(): Response
{
// 构造自己项目下的响应
return json([
'code' => $this->exceptionInfo['statusCode'], // 使用 statusCode 作为 code 返回
'msg' => $this->exceptionInfo['errorMsg'],
'data' => $this->responseData,
]);
}
}
谢谢!异常信息为了统一,我这里全部使用成员变量了。
当项目需要自定义情况比较多的时候,很可能需要扩展 Handler,此时可以继承 Handler 然后修改对应方法即可