Laravel 对齐说明
受众:Laravel 背景开发者、框架贡献者 摘要:说明 SpringOpen 与 Laravel 常见开发体验的语义对应关系,以及明确不照搬的能力边界。
SpringOpen 的目标不是复刻 Laravel 实现,而是在 Java / Spring 生态中提供相近的工程语义:服务注册、配置、Provider、路由中间件、权限策略、队列、调度、事件、通知、CLI、迁移和脚手架都有对应落点。已有成熟 Java 生态方案时,优先生态替换;没有真实消费方的高级语义不提前造轮子。
对齐矩阵
| Laravel 能力 | SpringOpen 对应 | 说明 |
|---|---|---|
Service Provider register() / boot() | spring-open-starter-lifecycle 的 ServiceProvider / ServiceContainer / BindingRegistry | 用生命周期 Provider 声明服务、配置 schema、菜单权限和启动报告 |
| Facades | 各 starter Facade 短入口 | 例如 Payment、Notification、Storage、Search 等门面 |
| Manager / Driver | Facade → Manager → ConfigResolver → Provider SPI | Provider 命名、配置解析和运行时覆盖统一走 starter contract |
config/* + 运行时配置 | spring.open.* 命名空间 + 配置中心 config_entry + RuntimeConfigSource | 本地配置兜底,后台配置优先 |
| Route Middleware | 中间件组 + @RouteMiddleware | 建立在 Spring MVC HandlerInterceptor 之上 |
| FormRequest | FormRequest BodyAdvice | 请求规范化、授权和校验集中处理 |
| Gate / Policy | 资源实例级 Gate / Policy | 用于对象级权限判定 |
| Model Observer / 模型事件 | 模型生命周期事件 | 业务实体变化通过事件和 Hook / Pipeline 承接 |
API Resource whenLoaded | ResourceIncludes + JSON:API starter | 用 ?include= 控制关联资源展开 |
route:list | /actuator/routes + CLI route:list | 运行态和源码巡检双入口 |
| artisan | spring-open-cli | 覆盖 route、schedule、queue、migration、seed、config、module、actuator、codegen、version 等命令 |
make:* | spring-open-codegen | CRUD 后端、迁移、菜单权限、Admin、测试和文档预览一体生成 |
| Migration / Seeder | Liquibase 迁移 + seed changeSet + seed:run | 使用 Liquibase 作为 Java 生态迁移基线 |
| Queue / Horizon | starter-queue + core-queue 运维面 | 支持失败任务、重试、恢复和指标 |
| Scheduler | starter-scheduler + core-scheduler 运维面 | 支持 db-scheduler、执行日志和后台运维 |
| Events / Notifications / Mail / Cache / Storage / Rate Limit / Localization / Validation / Pagination / Soft Delete | 对应 starter / core 模块 | 采用 SpringOpen 的 starter + core 分层 |
| Pennant | starter-feature-flag + core-feature-flag | Feature Flag 运行时和管理面 |
| Cashier | core-cashier | 本土化收银台、订单、回调、补偿和支付方式 |
| Socialite | JustAuth 封装的 OAuthProvider SPI | OAuth/OIDC 通过统一身份底座接入 |
| Sanctum / Passport | Sa-Token + Open Platform AK/SK / scope / 签名 | Java 生态替换,不照搬 token 模型 |
| Scout / Broadcasting | starter-search + module-search;starter-websocket + core-websocket | 搜索和实时通信分别由独立底座承接 |
| Telescope | audit + logging + observability + queue / scheduler 运维面 | 语义覆盖在多个运维面,不做单一聚合 UI |
明确非目标
| Laravel 能力 | SpringOpen 决策 |
|---|---|
Eloquent 关系 ORM(hasMany 等) | 主线坚持 MyBatis-Plus + BaseService 的 Service-first 通用查询,不引入关系映射 DSL 或万能通用 Controller |
| artisan tinker | Java 生态已有 JShell,当前价值低、复杂度高,不做框架内 REPL |
| Blade 模板语法 | Thymeleaf + Admin/App/PC/Install/Docs 五端前端工程是既定选型,不仿写 Blade |
| 全局 helper 函数 | spring-open-starter-toolkit 工具类已覆盖,不引入全局函数命名空间 |
Job Batching(Bus::batch)等队列高级语义 | 无真实消费方前不做;后续如出现明确业务场景,再按 Queue contract 扩展 |
扩展建议
从 Laravel 迁移过来的开发者可以按以下路径找落点:
| 想做的事 | 推荐入口 |
|---|---|
| 新增业务模块 | 模块地图 与 工程约定 |
| 新增第三方 Provider | Provider 扩展模型 |
| 新增后台配置项 | 配置说明 与 配置中心 |
| 新增路由 / 中间件 | Web 规范 |
| 新增迁移和 seed | 数据库 |
| 新增 CLI / 代码生成能力 | CLI / Codegen |