ThinkPHP 获取请求信息
1. 前言
前面小节介绍了 ThinkPHP 的路由规则,包括 POST、PUT、GET、DELETE 请求方式,本小节主要介绍这几种请求方式中一些常见的信息获取,获取这些参数将有助于加深框架的理解,并且能很好的理解框架工作原理,也能通过这些有用的信息来分析业务中的 BUG。
2. 调用请求对象
首先,为了演示方便,我们定义一个路由规则,定义代码如下:
<?php
use think\facade\Route;
Route::get('info','Test/getInfo');
Tips: 其中
info表示路由名,这是一个GET请求方式,Test表示控制器名,getInfo表示Test控制器下的方法名。
可以直接在控制器方法的参数中注入 Request 类对象,参考代码如下:
<?php
namespace app\controller;
use app\BaseController;
use think\Request;
class Test extends BaseController
{
public function getInfo(Request $request){
halt($request);
}
}
Tips: 其中
Request表示请求对象,这是通过依赖注入进来的,halt()方法是打印内容并结束,$request表示Request对象。
执行结果如下图所示:

Tips: 如图所示表示打印的
Request对象的信息,其中包含了全部的请求信息。
3. 获取当前访问域名或 IP
可以使用 Request 对象中的 host() 方法获取当前访问的域名或 IP,代码如下:
public function getInfo(Request $request){
halt($request->host());
}
执行结果如下图所示:

Tips: 如图所示
host()方法获取到的是当前访问的域名,不包含子url。
4. 获取当前访问端口
可以使用 Request 对象中的 port() 方法获取当前访问的端口号,代码如下:
public function getInfo(Request $request){
halt($request->port());
}
执行结果如下图所示:

Tips: 所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号 。
5. 获取 HTTP 头信息
可以使用 Request 对象中的 header() 方法获取当前 HTTP 请求的头信息,代码如下:
public function getInfo(Request $request){
halt($request->header());
}
执行结果如下图所示:

6. Request 请求对象方法说明
下面列举了一些 Request 请求对象中方法的说明:
| 方法名 | 功能与作用描述 |
|---|---|
| host | 当前访问域名或者IP |
| scheme | 当前访问协议 |
| port | 当前访问的端口 |
| remotePort | 当前请求的REMOTE_PORT |
| protocol | 当前请求的SERVER_PROTOCOL |
| contentType | 当前请求的CONTENT_TYPE |
| domain | 当前包含协议的域名 |
| subDomain | 当前访问的子域名 |
| panDomain | 当前访问的泛域名 |
| rootDomain | 当前访问的根域名 |
| url | 当前完整URL |
| baseUrl | 当前URL(不含QUERY_STRING) |
| query | 当前请求的QUERY_STRING参数 |
| baseFile | 当前执行的文件 |
| root | URL访问根地址 |
| rootUrl | URL访问根目录 |
| pathinfo | 当前请求URL的pathinfo信息(含URL后缀) |
| ext | 当前URL的访问后缀 |
| time | 获取当前请求的时间 |
| type | 当前请求的资源类型 |
| method | 当前请求类型 |
| rule | 当前请求的路由对象实例 |
7. 小结
本节课介绍了如何使用 Request 对象获取请求信息,首先介绍了如何调用 Request 请求对象,然后介绍了如何获取当前请求域名、当前访问端口、当前请求的 HTTP 头信息,最后列举了 Request 请求对象中方法的作用说明,若要调用其他方法可以参考本节课介绍的几种方式。
Tips: 代码仓库:https://gitee.com/love-for-poetry/tp6