ThinkPHP 获取请求信息

1. 前言

前面小节介绍了 ThinkPHP 的路由规则,包括 POSTPUTGETDELETE 请求方式,本小节主要介绍这几种请求方式中一些常见的信息获取,获取这些参数将有助于加深框架的理解,并且能很好的理解框架工作原理,也能通过这些有用的信息来分析业务中的 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