用途
FuseCore 是一套用于 Laravel 13 的模块化单体应用架构。它把系统拆成多个自包含的功能模块(例如 User、Dashboard、Blog),用于在大型 Laravel 项目中组织代码、隔离功能边界,并配套提供 React 19 前端集成方案。资料主要面向在 FuseCore 项目中创建模块、理解其结构和实现功能的场景。
主要能力
- 模块化组织:每个模块是独立文件夹,包含 App/Models、App/Http/Controllers、App/Services、App/Providers、Config、Database/Migrations、Resources/React、Routes/api.php 和 module.json。
- 自动发现:通过每个模块的 module.json 自动注册模块,字段包括 name、version、enabled、isCore、dependencies,可选 cache_prefix。
- 契约与 Trait:提供 ModuleInterface、ReactModuleInterface 契约,以及 HasModule(资源加载)、HasModuleDatabase 等 Trait;模块 ServiceProvider 使用 HasModule。
- React 集成:每个模块可拥有隔离的 React 资源(Resources/React/),资料标注使用 React 19 + TypeScript 7 与 Inertia 3 作为桥接。
- 多语言:支持 FR/EN/DE/IT/ES 多语言,i18n 文件位于 /Resources/React/i18n/locales/。
- 模块级缓存前缀:可在 module.json 中通过 cache_prefix 为各模块配置缓存前缀。
使用方式
资料给出的关键约定:
- 所有代码放在
/FuseCore/{Module}/,不放在/app/。 - 每个模块必须有 module.json 用于发现,并有使用 HasModule Trait 的 ServiceProvider。
- 路由放在模块的
/Routes/api.php,迁移放在模块的/Database/Migrations/,接口放在/App/Contracts/。 - 单个文件不得超过 FUSE_SOLID_MAX_LINES,超出需拆分。
- 建议每个模块的依赖通过契约声明,控制器不承载业务逻辑(提取到模块 Service)。
快速创建模块的示例命令与代码(来自资料):
mkdir -p FuseCore/{ModuleName}/{App/{Models,Http/Controllers,Services,Providers},Database/Migrations,Resources/React,Routes}
php artisan fusecore:cache-clear
module.json 示例:
{
"name": "ModuleName",
"version": "1.0.0",
"enabled": true,
"isCore": false,
"dependencies": ["User"]
}
ServiceProvider 示例:
class ModuleNameServiceProvider extends ServiceProvider
{
use HasModule;
public function boot(): void
{
$this->loadModuleMigrations();
}
}
路由示例:
Route::middleware(['api', 'auth:sanctum'])->group(function () {
Route::apiResource('items', ItemController::class);
});
资料还描述了一个强制性的智能体工作流:在实现前并行启动三个智能体(explore-codebase 分析 /FuseCore/ 中已有模块、research-expert 通过 Context7 核对 Laravel 13 模式、laravel-expert 应用 Laravel 最佳实践),实现后运行 sniper 进行校验。
适用场景
- 需要按功能边界拆分的大型 Laravel 13 项目。
- 需要模块级隔离 React 前端的项目。
- 需要多语言支持与模块级缓存管理的项目。
限制与注意事项
资料明确指出:Laravel 13(稳定 13.33)最低要求 PHP 8.3;L13 中在模型自身 boot 期间实例化模型会抛出 LogicException,因此绑定放在 register(),观察者与钩子放在 boot();模块间不得直接导入具体类,必须经由 Contract;迁移必须由各模块自行管理,不得共享。资料未提供安装命令、许可协议、收费方式或性能数据,这些内容暂未提供。