可帮助开发者减少重复代码,提升开发效率。提供 ExceptionHandlerTrait,支持异常统一日志记录、JSON 格式响应,区分测试/生产环境提示,还可控制是否记录日志。【此简介由AI生成】
ysy/hyperf-traits
Hyperf 框架通用 Trait 集合,减少重复代码,提升开发效率。 1.0.0版本适用3.0框架,1.1.0版本适用3.1框架
1. 安装
composer require ysy/hyperf-traits
2. 核心功能
当前包含 ExceptionHandlerTrait,提供:
- 异常统一日志记录(含文件、行号、堆栈)
- JSON 格式响应(区分测试/生产环境提示)
- 支持仅返回响应不记录日志(可控异常场景)
3. 使用示例
示例1:服务类中处理业务异常
<?php
namespace App\Service;
use Ysy\Hyperf\Traits\ExceptionHandlerTrait; // 引入Trait
class InvoiceService
{
use ExceptionHandlerTrait; // 使用Trait
/**
* 批量导入发票
*/
public function batchImport(array $data)
{
try {
// 模拟业务异常:数据为空
if (empty($data)) {
throw new \RuntimeException('导入数据不能为空', 400);
}
// 正常业务逻辑...
return ['status' => true, 'msg' => '导入成功'];
} catch (\Throwable $e) {
// 1. 记录异常日志 + 返回JSON响应(适合未知/系统异常)
return $this->handleException(
$e,
'发票批量导入异常', // 日志前缀(便于筛选)
['data_count' => count($data)] // 额外日志上下文(可选)
);
}
}
}
示例2:控制器中处理接口异常
<?php
namespace App\Controller;
use Hyperf\HttpServer\Annotation\AutoController;
use Hyperf\HttpServer\Contract\RequestInterface;
use Ysy\Hyperf\Traits\ExceptionHandlerTrait;
#[AutoController]
class InvoiceController extends AbstractController
{
use ExceptionHandlerTrait;
/**
* 接口:获取发票详情
*/
public function detail(RequestInterface $request)
{
try {
$invoiceId = $request->input('invoice_id');
if (empty($invoiceId)) {
throw new \RuntimeException('发票ID不能为空', 400);
}
// 正常查询逻辑...
return $this->success(['id' => $invoiceId, 'amount' => 100]);
} catch (\Throwable $e) {
// 2. 仅返回响应,不记录日志(适合已知可控异常)
return $this->returnOnly($e);
}
}
// 辅助方法:成功响应(示例)
private function success(array $data)
{
return $this->response->json(['code' => 0, 'msg' => 'success', 'data' => $data]);
}
}
4. 核心方法说明
| 方法名 | 作用 | 适用场景 |
|---|---|---|
handleException |
记录异常日志 + 返回JSON响应 | 未知异常、系统异常 |
returnOnly |
仅返回JSON响应,不记录日志 | 参数错误、已知业务异常 |
5. 环境区分说明
- 测试环境(
env('TEST') === 'YES_TEST'):响应返回真实异常信息,便于调试; - 生产环境:响应返回“系统服务暂时不可用,请稍后再试”,避免暴露敏感信息。