hyperf-traits:基于 Hyperf 框架的通用 Trait 集合项目

可帮助开发者减少重复代码,提升开发效率。提供 ExceptionHandlerTrait,支持异常统一日志记录、JSON 格式响应,区分测试/生产环境提示,还可控制是否记录日志。【此简介由AI生成】

分支1Tags2
文件最后提交记录最后更新时间
ss8 个月前
ss8 个月前
add LICENSE.8 个月前
ss7 个月前
ss7 个月前

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'):响应返回真实异常信息,便于调试;
  • 生产环境:响应返回“系统服务暂时不可用,请稍后再试”,避免暴露敏感信息。

项目介绍

可帮助开发者减少重复代码,提升开发效率。提供 ExceptionHandlerTrait,支持异常统一日志记录、JSON 格式响应,区分测试/生产环境提示,还可控制是否记录日志。【此简介由AI生成】

定制我的领域