tp6废弃$request->url(true),改用$request->fullurl()获取完整url;$request->url()仅返回路径+查询字符串;需手动拼接或判断cli/swoole环境。

ThinkPHP5 和 ThinkPHP6 获取 URL 路径的写法差异不小,核心在于方法名、行为逻辑和环境兼容性三方面都变了。最直接的区别是:TP6 废弃了 $request->url(true),改用 $request->fullUrl() 获取完整 URL;$request->url() 在 TP6 中只返回路径+查询字符串,不再自动拼协议和域名。
获取完整 URL(含协议、域名、路径、参数)
TP5 支持 $request->url(true) 直接返回带 scheme 和 host 的完整地址;TP6 中该方法已移除,调用会报错“Method url does not exist”。必须改用:
-
$request->fullUrl()—— 自动拼接scheme://host/path?query,最稳妥,但不含锚点(#xxx) - 手动拼接:
$request->scheme() . '://' . $request->host() . $request->url(),适合需要精细控制的场景
获取路径部分(不含域名,含 query)
两者都支持 $request->url(),但语义更明确:
- TP5 的
$request->url()默认返回/index/user?id=1这类路径+查询字符串 - TP6 完全一致,但要注意:若启用 URL 重写(如 Apache mod_rewrite),它返回的是重写后的路径,不是原始
$_SERVER['REQUEST_URI'] - 别再依赖
$request->url(true),它在 TP6 中不存在
获取域名、端口与子目录前缀
TP6 对子目录支持更严谨,但需主动处理:
-
$request->host()→ 只返回域名(如example.com),不带端口 -
$request->port()→ 返回端口号(HTTP 默认为空,HTTPS 默认为 443) -
$request->root()→ 返回推导出的根地址(如https://example.com/admin),依赖APP_URL配置或自动识别,线上建议显式配置 - 子目录前缀(如
/admin)不能靠$_SERVER['SCRIPT_NAME']简单截取,应使用$request->baseFile()获取入口文件路径后解析
CLI 或 Swoole 环境下要先判断
TP6 的 URL 方法在非 HTTP 环境会直接抛异常:
- 调用前务必检查:
if (!$request->isCli() && !$request->isSwoole()) { ... } - 否则
$request->url()或fullUrl()会中断执行
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











