tp6接口配置核心逻辑不变,但加载方式分层化、参数获取默认不合并路由变量、json响应依赖accept头或配置项,需调整验证器路径、中间件类型声明及模型返回值处理。

接口配置差异确实不小,但核心逻辑没变,主要是加载方式、参数获取和响应控制这三块变了。
配置结构从单文件变成分层+环境变量
TP5 把所有配置(包括数据库、缓存、路由、API相关)都塞在 config.php 一个大数组里;TP6 拆成 config/app.php、config/database.php、config/route.php 等多个文件,各自职责清晰。真正影响接口行为的开关(比如 default_return_type、ajax_prefix、jsonp_callback)现在分散在不同文件里。更重要的是,.env 文件成了“开关总控”——比如设 APP_DEBUG=true 或 DEFAULT_RETURN_TYPE=json,会覆盖 config 文件里的对应值。但注意:.env 只对显式调用 env() 的字段生效,不是所有配置项都会被它接管。
请求参数获取默认不合并,接口容易拿不到 ID 或参数
TP5 默认把 URL 路径参数(如 /user/123 中的 123)、GET 和 POST 参数全部合并进 input() 或 $request->param();TP6 默认只合并 GET + POST,不包含路由变量。结果就是迁移后,原来 input('id') 能拿到的值,现在返回 null。修复方法有两个:
- 在路由定义里加选项:
->option(['merge_param' => true]) - 或改用资源路由:
Route::resource('user', 'User'),它默认开启合并
JSON 响应行为更严格,不写 header 容易返回 HTML 包裹的 JSON
TP5 的 json() 方法基本等于 header('Content-Type: application/json') + echo json_encode();TP6 的 json() 会根据请求头 Accept 或配置项 default_return_type 推导响应类型。如果前端没发 Accept: application/json,或者 config/app.php 里 default_return_type 是 'html',那 json($data) 就会输出 <pre class="brush:php;toolbar:false;">{...}</pre> 这种 HTML 格式。稳妥做法是:
- 显式设置类型:
return json($data)->header('Content-Type', 'application/json') - 或统一在
config/app.php中设'default_return_type' => 'json'
验证器、中间件、模型返回值也要同步调整
- 验证器类路径变了:
think\Validate→think\validation\Validate,且不再支持直接传数组验证,必须用验证器类或容器绑定 - 中间件
handle()方法必须声明$next类型为\Closure -
Db::select()和模型查询返回Collection对象,不能直接return $list,得转成数组:return json($list->toArray())或用success()助手函数
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











