thinkphp6的route::resource()默认完整映射7个restful动作(含delete/put/patch等),区别于tp5的精简映射;必须显式用->only()限定且紧贴resource()调用,否则无效;路由缓存启用后需手动执行php think route:clear刷新。

Route::resource() 生成的路由比 ThinkPHP5 多出 7 个方法,但你没限定 only 或 except,它就全注册了——这是最常被忽略的“变”点。
为什么 Route::resource() 会多注册 DELETE/PUT/PATCH 等路由?
ThinkPHP6 的 Route::resource() 默认行为是完整 RESTful 映射(7 个动作),不像 TP5 那样默认只映射 index/read。哪怕你只写了 ->only(['index', 'read']),如果写法不严谨,也可能失效。
- 必须显式调用
->only(['index','read']),且该链式调用要放在闭包外、整个资源路由定义之后 - 错误写法:
Route::resource('article','Topic')->only(['index','read']);是对的;但若写成Route::resource('article','Topic')->middleware(...)->only(...),中间件会打断链式调用,only不生效 - TP6 路由注册顺序更严格:分组 > 资源 > 规则,
only必须紧贴resource()调用,否则被忽略
url() 函数生成 URL 时 name 模式和 path 模式混用容易出错
TP6 的 url() 支持两种模式:url('[blog.index]')(name 模式)和 url('blog/index')(path 模式),但它们底层解析逻辑不同,混用会导致路径拼接异常或 404。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- name 模式依赖路由定义时是否调用
->name('blog.index'),漏掉这步就返回空字符串 - path 模式走的是控制器/方法路径匹配,但若启用了
url_route_must = true(默认开启),未定义的 path 模式路由会被直接拦截,不进入控制器 - 动态参数必须用数组传入:
url('[blog.read]', ['id' => 123]),不能写成url('[blog.read]/123'),后者会被当作文本路径处理
路由缓存开启后,修改路由文件不生效
TP6 默认启用路由缓存('route_cache' => true),开发阶段改了 route/app.php 却看不到效果,不是代码问题,是缓存没清。
- 清缓存命令是
php think route:clear,不是php think clear:all(后者不清路由缓存) - 缓存文件位置在
runtime/route.php,手动删也行,但要注意权限和自动重建时机 - 开发环境建议临时关闭缓存:
'route_cache' => false,上线再打开
RESTful 路由 + 中间件绑定的写法变了
TP6 不再支持在 Route::resource() 内部直接链式绑定中间件,必须拆开写或用分组包裹。
- 错误写法:
Route::resource('user','User')->middleware(Auth::class);—— 中间件不会应用到任何子路由 - 正确写法一(分组):
Route::group(function(){ Route::resource('user','User'); })->middleware(Auth::class); - 正确写法二(单个绑定):
Route::get('user','User/index')->middleware(Auth::class); - TP6 的中间件绑定粒度更细,
resource()返回的是多个独立路由对象,无法统一链式绑定
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










