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-response、mitoop/laravel-efficient-form-request、mitoop/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 参数:
name、email、status— 筛选字段sort— 排序字段,可选值created_at、name,前缀-表示降序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 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 admin9/laravel-scramble-extensions 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Swagger integration to Laravel 5
Easy Swagger endpoint using the Zend Expressive routes config
一个接口文档生成器
The following pages give you some general information on how to use our APIs.<br/>The actual API services documentation then follows further below. You can use the menu to jump between API sections.<br/><br/>This page has a built-in HTTP(S) client, so you can test the services directly from within t
OpenAPI specification generator and Swagger UI for PHP 7.2-8.4 projects (standalone and Nette Framework)
统计信息
- 总下载量: 9
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 39
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-02-23