v1.0.0
首个正式版本。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」命中方法,故listView在action_suffix='View'下的可达 URL 是user/list,生成短形式;不以该后缀结尾的方法本无可达 URL,只登记不生成(生成即凭空新增端点)。 - 防误用:单应用禁
--module、多应用必须显式--module(或*);app/controller与模块控制器目录并存的混合布局判为有歧义并停下要求--mode=single|multi。另提供--path/--namespace/--dry-run。
- 只新增、绝不删除;幂等可反复运行;悬空条目只提醒不清理;生成条目不写 tier,落
- README 门面补徽章行;
composer.json补support(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