TP6中获取当前网页路径需替换TP5写法:request()->pathinfo()已废弃,应改用request()->path();request()->url()仍可用但不自动识别HTTPS代理头,推荐request()->fullUrl();路由参数需显式设置merge_param=>true才能通过param()获取。

不能直接用。
ThinkPHP 5.0 中获取当前网页路径的常见写法,比如 request()->url()、request()->baseUrl()、request()->pathinfo() 或旧版 $this->request->url(),在 TP6 中大部分仍可调用,但行为和返回值有关键变化,不能无差别沿用。
获取当前完整 URL(含协议、域名、路径、查询参数)
TP5 写法(可能还在用):
$this->request->url(); // 或 request()->url()
TP6 中:
✅ 依然可用,返回字符串格式的完整 URL(如 http://localhost:8000/user/123?id=1)
⚠️ 注意:该方法不再自动识别 HTTPS 代理头(如 Nginx 反向代理时 X-Forwarded-Proto),需手动配置 app.url 或设置 $_SERVER['HTTPS'],否则可能始终返回 http://
建议统一改用更可控的方式:
立即学习“PHP免费学习笔记(深入)”;
$request->fullUrl(); // 推荐,自动合并 query 参数,语义清晰 // 或 $request->scheme() . '://' . $request->host() . $request->root() . $request->path() . $request->getQueryString(true);
获取不带查询参数的路径(如 /user/123)
TP5 常用:
$this->request->pathinfo(); // 返回 PATH_INFO 字符串
TP6 中:
✅ request()->path() 可替代(返回 /user/123)
❌ request()->pathinfo() 已废弃,调用会报错或返回空
其他常用对应关系:
-
request()->module()→ ✅ 仍可用(多应用下返回当前应用名,如'home') -
request()->controller()→ ✅ 仍可用(返回控制器类名,不含命名空间) -
request()->action()→ ✅ 仍可用(返回方法名) -
request()->root()→ ✅ 返回根路径(如/tp6,用于子目录部署) -
request()->root(true)→ ✅ 返回带协议+域名的绝对根地址(如http://site.com/tp6)
路由变量(如 /user/:id 中的 id)拿不到?不是路径问题,是配置问题
很多开发者以为“路径获取失败”,其实是 request()->param('id') 返回空 —— 这不是路径读取逻辑变了,而是 TP6 默认不合并路由参数到 param() 结果中。
必须在定义路由时显式开启:
// TP6 正确写法(缺了 option 就拿不到 :id)
Route::get('user/:id', [\app\controller\User::class, 'read'])
->option(['merge_param' => true]);或改用资源路由(默认启用):
Route::resource('user', 'User'); // /user/123 自动注入 $id 到 read 方法总结几个关键替换建议
- 不要用
pathinfo(),改用path() - 不要依赖
input('xxx')模糊取参,改用param('xxx')并确认路由已开启merge_param -
url()可用,但生产环境建议用fullUrl()或拼接方式确保协议正确 - 所有路径相关方法返回值仍是字符串,无需额外转换,但注意末尾是否带
/(root()通常不带,path()始终以/开头)
不复杂但容易忽略



















