Skip to content

v1.0.0

Choose a tag to compare

@xyj2156 xyj2156 released this 11 Sep 15:21
· 24 commits to main since this release
2d1c6a8

首个正式版本。0.0.x 属脚手架期;自本版起承诺公共 API、/_forge/routes 端点契约与命令输出形态稳定,破坏性变更一律走 major。

新增

  • route:forge:gen 命令 + AutoRouteScanner:把「当前可被 ThinkPHP 自动路由触达的端点」反向物化成显式命名路由,让习惯自动路由的项目低成本接入。单应用写 route/forge.auto.php,多应用写 app/{模块}/route/forge.auto.php
    • 只新增、绝不删除;幂等可反复运行;悬空条目只提醒不清理;生成条目不写 tier,落 unassigned 并留 // ->tier('…') 待填
    • 动作段按 ThinkPHP 自身的可达规则反推:think 用「URL 段 + action_suffix」命中方法,故 listViewaction_suffix='View' 下的可达 URL 是 user/list,生成短形式;不以该后缀结尾的方法本无可达 URL,只登记不生成(生成即凭空新增端点)。
    • 防误用:单应用禁 --module、多应用必须显式 --module(或 *);app/controller 与模块控制器目录并存的混合布局判为有歧义并停下要求 --mode=single|multi。另提供 --path / --namespace / --dry-run
  • README 门面补徽章行;composer.jsonsupport(issues / source / docs)。

修复

  • 命令失败不再向用户倒框架堆栈route:forge:list / types 此前只捕 ForgeExceptionContract,适配层自己的 fail-fast(url_lazy_route=true、非 RuleItem 规则)逃到 console 异常处理器。且数据产物形态的失败信息改走 STDERR——此前连 [RF_BE_008] 错误文本都会混进 d.ts 产物。
  • route:forge:gen 落盘可见:目标不可写 / 被目录占位时显式报错并说明本轮已写入哪些文件,不再静默留下半个文件却返回成功(本命令幂等,修好后重跑即补齐)。
  • route:forge:types --out 的写盘校验此前在生产运行时永不生效:ThinkPHP 的错误初始化器把 E_WARNING 抛成 ErrorException=== false 分支轮不到执行(仅在测试里可达)。
  • AutoRouteScanner::detectMode() 死分支:混合布局过去静默回落 single,导致 route:forge:gen 扫错根目录并无故拒绝 --module

依赖

  • route-forge/common 下限 ^1.0^1.1.1^1.0 会放行 1.0.0,而它上面 'prefix' => 'manage' 这类最自然的单值写法直接 TypeError 崩溃,中文 level description 在摘要内嵌里还会被转成 \uXXXX

文档

  • 去掉 ThinkPHP 8 根本不存在的 url_convert 边界描述,改写为真实边界(action_suffix / camelCase / url_case_sensitive)。
  • 元数据与包简介中文化,明确不做英文版(ThinkPHP 使用者基本在国内)。

验证:本地 82 用例 / 264 断言全绿;GitHub Actions PHP 8.2–8.5 矩阵 success。

Full Changelog: 0.0.2...1.0.0