ThinkPHP 獲取請(qǐng)求信息
1. 前言
前面小節(jié)介紹了 ThinkPHP 的路由規(guī)則,包括 POST
、PUT
、GET
、DELETE
請(qǐng)求方式,本小節(jié)主要介紹這幾種請(qǐng)求方式中一些常見(jiàn)的信息獲取,獲取這些參數(shù)將有助于加深框架的理解,并且能很好的理解框架工作原理,也能通過(guò)這些有用的信息來(lái)分析業(yè)務(wù)中的 BUG
。
2. 調(diào)用請(qǐng)求對(duì)象
首先,為了演示方便,我們定義一個(gè)路由規(guī)則,定義代碼如下:
<?php
use think\facade\Route;
Route::get('info','Test/getInfo');
Tips: 其中
info
表示路由名,這是一個(gè)GET
請(qǐng)求方式,Test
表示控制器名,getInfo
表示Test
控制器下的方法名。
可以直接在控制器方法的參數(shù)中注入 Request
類(lèi)對(duì)象,參考代碼如下:
<?php
namespace app\controller;
use app\BaseController;
use think\Request;
class Test extends BaseController
{
public function getInfo(Request $request){
halt($request);
}
}
Tips: 其中
Request
表示請(qǐng)求對(duì)象,這是通過(guò)依賴(lài)注入進(jìn)來(lái)的,halt()
方法是打印內(nèi)容并結(jié)束,$request
表示Request
對(duì)象。
執(zhí)行結(jié)果如下圖所示:
Tips: 如圖所示表示打印的
Request
對(duì)象的信息,其中包含了全部的請(qǐng)求信息。
3. 獲取當(dāng)前訪(fǎng)問(wèn)域名或 IP
可以使用 Request
對(duì)象中的 host()
方法獲取當(dāng)前訪(fǎng)問(wèn)的域名或 IP
,代碼如下:
public function getInfo(Request $request){
halt($request->host());
}
執(zhí)行結(jié)果如下圖所示:
Tips: 如圖所示
host()
方法獲取到的是當(dāng)前訪(fǎng)問(wèn)的域名,不包含子url
。
4. 獲取當(dāng)前訪(fǎng)問(wèn)端口
可以使用 Request
對(duì)象中的 port()
方法獲取當(dāng)前訪(fǎng)問(wèn)的端口號(hào),代碼如下:
public function getInfo(Request $request){
halt($request->port());
}
執(zhí)行結(jié)果如下圖所示:
Tips: 所謂的端口,就好像是門(mén)牌號(hào)一樣,客戶(hù)端可以通過(guò)ip地址找到對(duì)應(yīng)的服務(wù)器端,但是服務(wù)器端是有很多端口的,每個(gè)應(yīng)用程序?qū)?yīng)一個(gè)端口號(hào),通過(guò)類(lèi)似門(mén)牌號(hào)的端口號(hào),客戶(hù)端才能真正的訪(fǎng)問(wèn)到該服務(wù)器。為了對(duì)端口進(jìn)行區(qū)分,將每個(gè)端口進(jìn)行了編號(hào),這就是端口號(hào) 。
5. 獲取 HTTP 頭信息
可以使用 Request
對(duì)象中的 header()
方法獲取當(dāng)前 HTTP
請(qǐng)求的頭信息,代碼如下:
public function getInfo(Request $request){
halt($request->header());
}
執(zhí)行結(jié)果如下圖所示:
6. Request 請(qǐng)求對(duì)象方法說(shuō)明
下面列舉了一些 Request
請(qǐng)求對(duì)象中方法的說(shuō)明:
方法名 | 功能與作用描述 |
---|---|
host | 當(dāng)前訪(fǎng)問(wèn)域名或者IP |
scheme | 當(dāng)前訪(fǎng)問(wèn)協(xié)議 |
port | 當(dāng)前訪(fǎng)問(wèn)的端口 |
remotePort | 當(dāng)前請(qǐng)求的REMOTE_PORT |
protocol | 當(dāng)前請(qǐng)求的SERVER_PROTOCOL |
contentType | 當(dāng)前請(qǐng)求的CONTENT_TYPE |
domain | 當(dāng)前包含協(xié)議的域名 |
subDomain | 當(dāng)前訪(fǎng)問(wèn)的子域名 |
panDomain | 當(dāng)前訪(fǎng)問(wèn)的泛域名 |
rootDomain | 當(dāng)前訪(fǎng)問(wèn)的根域名 |
url | 當(dāng)前完整URL |
baseUrl | 當(dāng)前URL(不含QUERY_STRING) |
query | 當(dāng)前請(qǐng)求的QUERY_STRING參數(shù) |
baseFile | 當(dāng)前執(zhí)行的文件 |
root | URL訪(fǎng)問(wèn)根地址 |
rootUrl | URL訪(fǎng)問(wèn)根目錄 |
pathinfo | 當(dāng)前請(qǐng)求URL的pathinfo信息(含URL后綴) |
ext | 當(dāng)前URL的訪(fǎng)問(wèn)后綴 |
time | 獲取當(dāng)前請(qǐng)求的時(shí)間 |
type | 當(dāng)前請(qǐng)求的資源類(lèi)型 |
method | 當(dāng)前請(qǐng)求類(lèi)型 |
rule | 當(dāng)前請(qǐng)求的路由對(duì)象實(shí)例 |
7. 小結(jié)
本節(jié)課介紹了如何使用 Request
對(duì)象獲取請(qǐng)求信息,首先介紹了如何調(diào)用 Request
請(qǐng)求對(duì)象,然后介紹了如何獲取當(dāng)前請(qǐng)求域名、當(dāng)前訪(fǎng)問(wèn)端口、當(dāng)前請(qǐng)求的 HTTP 頭信息,最后列舉了 Request
請(qǐng)求對(duì)象中方法的作用說(shuō)明,若要調(diào)用其他方法可以參考本節(jié)課介紹的幾種方式。
Tips: 代碼倉(cāng)庫(kù):https://gitee.com/love-for-poetry/tp6