ninex / lib
Framework-independent PHP CRUD core with optional Laravel and ThinkPHP integration
Requires
- php: ^8.1
Requires (Dev)
- laravel/pint: ^1.0
- phpunit/phpunit: ^10.5 || ^11.5
Suggests
- ext-tokenizer: Required by the CRUD generator for PHP syntax validation.
- guzzlehttp/guzzle: Guzzle 7 HTTP client integration.
- laravel/framework: Laravel 10–13 integration (use the PHP version required by your Laravel release).
- topthink/framework: ThinkPHP 8.1 integration.
- topthink/think-orm: ThinkORM 3 or 4 repository.
Provides
None
Conflicts
None
Replaces
None
README
一个极简的 PHP 开发脚手架,一条命令生成 CRUD,统一集成分页、验证、事务、响应与异常处理。
快速开始 · Laravel · ThinkPHP · 兼容范围 · 接入指南 · 更新记录
快速开始
安装到已有应用:
composer require ninex/lib:^2.1
Laravel
php artisan ninexlib:make-crud Product --fields="name:string,status:boolean,note:text?"
php artisan migrate
配置自动合并,路由自动加载,生成后清理路由缓存。预览时加 --dry-run;已有 Sanctum 等认证可以通过 --guard=sanctum 指定。
生成模型、服务、控制器、迁移与路由。Laravel 接入 →
ThinkPHP
php think ninexlib:make-crud Product --fields="name:string,status:boolean,note:text?"
生成服务、控制器、路由和 MySQL / SQLite 建表 SQL。执行对应 SQL,并由认证中间件提供可信的 actor[id];生成接口已包含统一异常返回。ThinkPHP 接入 →
独立命令与环境检查
独立 CLI 自动识别宿主框架,也可以显式指定:
vendor/bin/ninex make:crud Product --framework=laravel --fields="name:string,status:boolean" --dry-run
vendor/bin/ninex doctor --strict
Laravel / ThinkPHP 原生入口分别为 php artisan ninexlib:doctor、php think ninexlib:doctor。
需要修改 Laravel 默认配置时,运行 php artisan ninexlib:install。
完整字段类型、生成选项和诊断说明见接入指南。
默认接口
以 Product 为例,Laravel 与 ThinkPHP 均提供以下接口:
| 方法 | 地址 | 操作 |
|---|---|---|
GET |
/api/products |
分页列表 |
GET |
/api/products/{id} |
详情 |
POST |
/api/products |
创建 |
PUT |
/api/products/{id} |
更新 |
DELETE |
/api/products/{id} |
删除 |
生成的 CRUD 默认按用户隔离数据:接口通过项目已有的登录认证识别用户,每个人只能访问自己的记录。 例如,用户 A 创建的数据,用户 B 无法查看、修改或删除。
登录功能由你的项目提供。公开查询、后台管理或团队共享等场景,需要按业务调整生成的路由和 Service;详见认证与数据权限。
业务代码保持简短
$service->store(['name' => '键盘', 'status' => 0]); $service->show($id); $service->update($id, ['name' => '机械键盘']); $service->destroy($id); $service->paginate(['filter' => ['status' => 0], 'page_size' => 15]);
公共核心通过仓储接口接入数据库,使用数组与分页对象传递数据。生成器负责起步代码,应用决定自己的业务规则。
2.1 提供简洁业务模板:Controller 和 Service 均保留 CRUD 方法,验证、过滤和常用保存钩子直接显示在业务文件中,CRUD 默认一行调用,字段无需维护重复名单,附中英文说明。Laravel 使用 Eloquent,ThinkPHP 使用原生查询接口;详见业务扩展与迁移。2.0.x 已生成的业务文件无需替换,也不会被自动覆盖。
统一响应与业务异常
创建返回 HTTP 201,成功响应保持一致:
{
"code": 0,
"message": "操作成功",
"data": { "id": 1, "name": "键盘", "status": 0 }
}
业务错误码与 HTTP 状态独立:
throw new \Ninex\Lib\Core\ServiceException( '库存不足', 10001, ['available' => 0], httpStatus: 409, );
分页、空值响应和旧协议开关见响应说明。
兼容范围
| 接入方式 | 最低 PHP | 集成范围 |
|---|---|---|
| 公共核心 / 独立 CLI | 8.1 | 无 Web 框架依赖;生成器需要 tokenizer |
| Laravel 10 | 8.1 | Eloquent、Artisan、自动发现 |
| Laravel 11 / 12 | 8.2 | Eloquent、Artisan、自动发现 |
| Laravel 13 | 8.3 | Eloquent、Artisan、自动发现 |
| ThinkPHP 8.1 | 8.1 | ThinkORM 3 / 4、原生命令、服务发现 |
约束为 ^8.1,测试矩阵覆盖 PHP 8.1~8.4 的对应组合。兼容旧版本不代表上游仍在维护;生产环境应使用受维护的 PHP 版本。
旧 LibModel 保留 guarded=['id'],validateForm 仍可选,旧控制器不强制启用 Policy。HTTP 状态、空值与筛选行为等差异见1.x → 2.x 迁移指南。
使用 接入指南 · Laravel 示例 · ThinkPHP 示例
维护 架构 · 开发测试 · 发布流程
许可 MIT