定制 admin9/laravel-scramble-extensions 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

admin9/laravel-scramble-extensions

Composer 安装命令:

composer require admin9/laravel-scramble-extensions

包简介

Scramble extensions for Laravel business-response APIs — auto-wraps OpenAPI docs with success/error envelope, scene-based form request extraction, and filter query parameter extraction.

README 文档

README

面向 Mitoop 生态业务接口约定的 Scramble (OpenAPI 文档生成器) 适配包。

这个包不是通用 Scramble 扩展。它服务于使用 mitoop/laravel-api-responsemitoop/laravel-efficient-form-requestmitoop/laravel-query-builder 的项目,把这些业务约定补充到 Scramble 生成的 OpenAPI 文档中。

兼容性

Package Version
PHP ^8.3
Laravel ^13.0
Scramble ^0.13.30

旧版 Laravel/Scramble 项目请继续使用本包 v0.2.x

主要功能:

  • 自动将 200 响应包装为统一的业务信封结构 {success, code, message, data, [meta], request_id}
  • 支持场景化表单请求 (Scene FormRequest) 的参数提取
  • 支持 Filter 查询参数自动提取(筛选字段、排序、分页)
  • 支持读取数据库字段注释并写入 OpenAPI schema description

各功能模块均可通过配置文件独立开启或关闭;未安装对应 Mitoop 包时,对应模块会自动跳过。

安装

composer require admin9/laravel-scramble-extensions

发布配置文件:

php artisan vendor:publish --tag=scramble-extensions-config

可选依赖

根据你使用的 Mitoop 约定,按需安装对应的包:

# 业务响应信封包装
composer require mitoop/laravel-api-response

# 场景化表单请求
composer require mitoop/laravel-efficient-form-request

# Filter 查询参数提取
composer require mitoop/laravel-query-builder

配置

配置文件 config/scramble-extensions.php

return [
    'response' => [
        'enabled' => true,
        // 控制器需要 use 的 trait,提供 $this->success() 等方法
        'trait' => 'Mitoop\\Http\\RespondsWithJson',
        // 模型命名空间,用于分页响应自动推断模型
        'model_namespace' => 'App\\Models',
        // 从数据库字段注释生成 schema description
        'column_comments' => true,
        // 修正业务响应 data 内 Scramble 无法精确推断的字段 schema
        // 当前支持:string_list
        'schema_overrides' => [],
    ],

    'scene_form_request' => [
        'enabled' => true,
    ],

    'filter' => [
        'enabled' => true,
        'pagination' => [
            'page_size_default' => 15,
            'page_size_max' => 100,
        ],
    ],
];

功能说明

1. 业务响应信封包装 (Response)

自动将所有 200 响应包装为统一的业务信封结构。

控制器需要 use 配置中指定的 Mitoop trait(默认 Mitoop\Http\RespondsWithJson),通过 $this->success()$this->error()$this->deny() 返回响应。

class UserController extends Controller
{
    use \Mitoop\Http\RespondsWithJson;

    public function show(User $user)
    {
        return $this->success($user);
    }

    public function index()
    {
        return $this->success(User::paginate());
    }
}

生成的 OpenAPI 文档中,标准响应结构为:

{
  "success": true,
  "code": 0,
  "message": "",
  "data": { ... },
  "request_id": "uuid7"
}

分页响应会额外包含 meta 字段:

{
  "success": true,
  "code": 0,
  "message": "",
  "data": [ ... ],
  "meta": {
    "pagination": "length_aware",
    "page": 1,
    "page_size": 15,
    "has_more": true,
    "total": 100
  },
  "request_id": "uuid7"
}

如果 Scramble 对某些业务响应字段推断过宽,可以通过 schema_overrides 收敛字段 schema:

'response' => [
    'schema_overrides' => [
        'permission_names' => 'string_list',
    ],
],

string_list 会生成 {"type":"array","items":{"type":"string"}},适合权限名、标签名等字符串列表字段。

2. 场景化表单请求提取 (Scene FormRequest)

支持 mitoop/laravel-efficient-form-request,允许同一个 FormRequest 根据控制器方法名定义不同的验证规则。

扩展会自动查找 FormRequest 上的 {actionName}Rules() 方法并提取参数到 OpenAPI 文档。

use Mitoop\LaravelEfficientFormRequest\EfficientSceneFormRequest;

class UserRequest extends EfficientSceneFormRequest
{
    // store 方法使用的规则
    public function storeRules(): array
    {
        return [
            'name' => 'required|string|max:255',
            'email' => 'required|email',
        ];
    }

    // update 方法使用的规则
    public function updateRules(): array
    {
        return [
            'name' => 'string|max:255',
        ];
    }
}
class UserController extends Controller
{
    public function store(UserRequest $request) { ... }
    public function update(UserRequest $request, User $user) { ... }
}

store 接口文档会包含 name(必填)和 email(必填)参数,update 接口文档只包含 name 参数。

3. Filter 查询参数提取 (Filter)

支持 mitoop/laravel-query-builder,自动从 Filter 类中提取筛选字段、排序选项和分页参数到 OpenAPI 文档。

use Mitoop\LaravelQueryBuilder\AbstractFilter;

class UserFilter extends AbstractFilter
{
    protected array $allowedSorts = ['created_at', 'name'];

    public function rules(): array
    {
        return [
            'name',
            'email',
            'status',
        ];
    }
}
class UserController extends Controller
{
    public function index()
    {
        $users = User::filter(UserFilter::class)->paginate();

        return $this->success($users);
    }
}

生成的文档会自动包含以下 query 参数:

  • nameemailstatus — 筛选字段
  • sort — 排序字段,可选值 created_atname,前缀 - 表示降序
  • page_size — 每页条数(默认 15,最大 100,可通过配置修改)
  • page — 页码

4. 模型字段注释 (Column Comments)

当模型字段在数据库 schema 中带有 comment 时,扩展会把 comment 写入对应 OpenAPI property 的 description。这用于让接口字段说明跟迁移/数据库字段注释保持一致。

该能力依赖数据库驱动能通过 Laravel schema builder 返回 comment 字段;不支持字段注释的驱动会安全跳过。

License

MIT

admin9/laravel-scramble-extensions 适用场景与选型建议

admin9/laravel-scramble-extensions 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 9 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 02 月 23 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「laravel」 「swagger」 「openapi」 「scramble」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 admin9/laravel-scramble-extensions 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 admin9/laravel-scramble-extensions 我们能提供哪些服务?
定制开发 / 二次开发

基于 admin9/laravel-scramble-extensions 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 9
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 39
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-02-23