ThinkPHP的Controller獲取request對象的幾種方式

文章目錄

  • 環境
  • 在Controller中獲取Request對象
    • 構造器注入
    • 操作方法注入
    • 繼承BaseController
    • 助手函數
    • Facade
  • 參考

環境

  • Windows 11 專業版
  • XAMPP 8.2.12
    • PHP 8.2.12
    • VSCode 1.103.0

在Controller中獲取Request對象

要想在Controller中獲取Request對象,有以下幾種方式:

  • 構造器注入
  • 操作方法注入
  • 繼承BaseController
  • 助手函數
  • Facade

下面一一舉例說明。

構造器注入

顧名思義,在控制器的構造器里注入Request對象:

namespace app\controller;use think\Request;class Test1 {protected $request;public function __construct(Request $request) {$this->request = $request;}public function foo() {// 使用request對象echo $this->request->pathinfo();}
}

運行結果如下:

在這里插入圖片描述

注:如果用 curl 命令訪問,如果輸出非常多的信息:

PS C:\> curl.exe --silent -XGET "http://localhost:8000/test1/foo"
test1/foo<style>#think_page_trace {position:fixed; bottom:0; right:0; font-size:14px; width:100%; z-index:999999; color:#000; text-align:left; font-family:'微軟雅黑';}#think_page_trace_tab {display:none; background:white; margin:0; height: 250px;}#think_page_trace_tab_tit {height:30px; padding: 6px 12px 0; border-bottom:1px solid #ececec; border-top:1px solid #ececec; font-size:16px;}#think_page_trace_tab_tit>span {color:#000; padding-right:12px; height:30px; line-height:30px; display:inline-block; margin-right:3px; cursor:pointer; font-weight:700;}#think_page_trace_tab_cont {overflow:auto; height:212px; padding:0; line-height:24px;}
......
......

這是因為開啟了debug模式。其實剛才頁面訪問時,在debug模式下,也返回了同樣多的內容。注意上圖中,在頁面右下角有一個圖標,可以點開,查看debug詳細信息。

如果想要關閉debug信息,打開項目根目錄里的 .env 文件:

APP_DEBUG = false

其默認值是true,改為false即可。

操作方法注入

顧名思義,在控制器的某個方法里注入Request對象:

namespace app\controller;use think\Request;class Test2 {public function foo(Request $request) {echo $request->pathinfo();}
}

運行結果如下:

PS C:\> curl.exe http://localhost:8000/test2/foo
test2/foo

這種方式好像有點怪,因為操作方法本身可以帶參數,現在把request對象也放進來,感覺有點亂。

繼承BaseController

namespace app\controller;use app\BaseController;class Test3 extends BaseController {public function foo() {echo $this->request->pathinfo();}
}

運行結果如下:

PS C:\> curl.exe http://localhost:8000/test3/foo
test3/foo

這種方法比較好。正常情況下,控制器就應該繼承BaseController類,而BaseController類已經通過構造器注入了App對象:

abstract class BaseController {......protected $request;......public function __construct(App $app) {......$this->request = $this->app->request;......

這樣,在子類控制器中,就可以直接使用request對象了。

助手函數

為了方便使用,系統為一些常用的操作方法封裝了助手函數,比如:

  • app()
  • config()
  • dump()
  • json()
  • request()
  • response()

其中 request() 助手函數是獲取當前Request對象,可以在任何需要的時候直接調用。

namespace app\controller;class Test4 {public function foo() {echo request()->pathinfo();}
}

運行結果如下:

PS C:\> curl.exe http://localhost:8000/test4/foo
test4/foo

Facade

可以通過Facade機制來靜態調用請求對象的方法:

namespace app\controller;use think\facade\Request;class Test5 {public function foo() {echo Request::pathinfo();}
}

運行結果如下:

PS C:\> curl.exe http://localhost:8000/test5/foo
test5/foo

注意區分:本例中 use 所引入的Request類和前面的有所不同。

參考

  • https://doc.thinkphp.cn/v8_0/request.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93483.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93483.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93483.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

week2-[循環結構]找出正數

week2-[循環結構]找出正數 題目描述 給定 NNN 個整數A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN?。請求出這 NNN 個數中有多少個數是正數&#xff0c;并求出這些正數的平均值。如果 A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN? 不存在正數&#xff0c;那么輸出 “Non…

Android平臺RTSP播放器選型指南:從開源方案到跨平臺低延遲專業SDK

1. 引言&#xff1a;Android RTSP 播放的三條路徑 在 Android 平臺實現 RTSP 播放&#xff0c;看似只是“能播起來”的問題&#xff0c;實際上是一個涉及延遲、穩定性、解碼性能、協議兼容、工程可控性等多維指標的綜合選型問題。 從安防監控、教育互動&#xff0c;到單兵指揮…

Linux安裝及遠程連接知識實踐

文章目錄一、VMware創建虛擬機故障及解決匯總1. 鏡像下載2. 鏡像選擇安裝3.安裝VMware遇到的相關問題4. VMware操作系統的安裝4.1 選擇系統的引導4.2 修改網卡名為eth0的形式(和CentOS7以前保持一致)4.3 進入下一步安裝界面4.4 進入到安裝摘要頁面(INSTALLATION SUMMARY)4.5 配…

F Core 批量寫與“軟實時”一致性:ExecuteUpdate / COPY / SqlBulkCopy 的取舍與事務權衡

EF Core 批量寫與“軟實時”一致性&#xff1a;ExecuteUpdate / COPY / SqlBulkCopy 的取舍與事務權衡 ? &#x1f4da; 目錄EF Core 批量寫與“軟實時”一致性&#xff1a;ExecuteUpdate / COPY / SqlBulkCopy 的取舍與事務權衡 ?1. 術語與目標 &#x1f9ed;2. 技術選型總覽…

基于PSO粒子群多目標優化的微電網調度算法matlab仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統原理簡介 4.1 改進粒子群算法 4.2 分布式電源與儲能模型公式 4.3 多目標函數 5.參考文獻 6.完整工程文件 1.課題概述 微電網優化調度的核心是在滿足系統約束&#xff08;如功率平衡、設備出力限制等&#xff09;的前…

Spring AI ChatClient集成Deepseek

Spring AI ChatClient集成Deepseek 下文將簡述如何通過spring ai集成deepseek實現智能對話。在開始之前你需要在deepseek官網申請一個apikey,并設置到系統變量中&#xff0c;保障安全性。 ChatModel 在集成deepseek前&#xff0c;我們先要了解一個chat model&#xff0c;chat m…

Azure微軟云內網接入問題

1. 域名解析失敗 azure需要給ClientSecretCredentialBuilder和AzureResourceManager都配置HTTP 代理,但還是會域名解析失敗,netty會調用InetAddress.getByName解析域名.最終只能在hosts文件寫死host和ip映射關系 2. netty版本不匹配,導致報錯netty某個方法找不到 azure只用引入…

【IDEA】設置Debug調試時調試器不進入特定類(Spring框架、Mybatis框架)

問題 以Ruoyi-Vue項目為例&#xff0c;以Debug方式啟動項目&#xff0c;在com.ruoyi.web.controller.system.SysUserController#list()方法中的userService.selectUserList(user)處打上斷點&#xff0c;訪問[系統管理–用戶管理]頁面&#xff0c;程序就會執行到該斷點處此時按下…

OpenCV 視頻處理全解析

OpenCV 視頻處理全解析&#xff1a;從基礎操作到高級應用?在計算機視覺領域&#xff0c;視頻處理是一個核心且廣泛應用的技術方向。無論是安防監控、自動駕駛還是短視頻特效&#xff0c;都離不開對動態視頻流的智能分析與處理。OpenCV 作為最流行的開源計算機視覺庫&#xff0…

java如何使用正則提取字符串中的內容

在Java中使用正則表達式提取字符串內容&#xff0c;主要通過java.util.regex包中的Pattern和Matcher類實現。以下是詳細步驟和示例&#xff1a;1. 基礎流程 import java.util.regex.Matcher; import java.util.regex.Pattern;public class RegexExample {public static void ma…

Baumer高防護相機如何通過YoloV8深度學習模型實現行人跌倒的檢測識別(C#代碼UI界面版)

《------往期經典推薦------》 AI應用軟件開發實戰專欄【鏈接】 序號項目名稱項目名稱11.工業相機 YOLOv8 實現人物檢測識別&#xff1a;&#xff08;C#代碼&#xff0c;UI界面版&#xff09;2.工業相機 YOLOv8 實現PCB的缺陷檢測&#xff1a;&#xff08;C#代碼&#xff0…

jetson orin nx(8G)燒錄super系統實錄

1. 說明 2. 下載新版發布包&#xff08;在PC上下載&#xff09; Jetson Linux Archive | NVIDIA Developer 安裝的jetpack版本為6.2.1&#xff08;rev.2)對應的Jetson Linux 36.4.4 點擊綠色區域的36.4.4>&#xff0c;進入下載頁面&#xff0c;如下 點擊Driver Package(B…

LeetCode算法日記 - Day 11: 尋找峰值、山脈數組的峰頂索引

目錄 1. 尋找峰值 1.1 題目解析 1.2 解法 1.3 代碼實現 2. 山脈數組 2.1 題目解析 2.2 解法 2.3 代碼實現 1. 尋找峰值 162. 尋找峰值 - 力扣&#xff08;LeetCode&#xff09; 峰值元素是指其值嚴格大于左右相鄰值的元素。 給你一個整數數組 nums&#xff0c;找到峰…

Cherryusb UAC例程對接STM32 SAI播放音樂和錄音(下)=>USB+SAI+TX+RX+DMA控制WM8978播放和錄音實驗

1. 程序基本框架 整個程序框架, 與之前的一篇文章《Cherryusb UAC例程對接STM32內置ADC和DAC播放音樂和錄音(中)>UACSTM32 ADCDAC實現錄音和播放》基本一致, 只是這次將ADC和DAC替換成了SAI TX/RX。因此這里不再贅述了。2. sai_dma_wm8978_usb.c主程序的實現說明 在menuconf…

Docker運行python項目:使用Docker成功啟動FastAPI應用

根據昨天成功使用阿里云鏡像加速后&#xff0c;我是根據windows本地的python項目&#xff0c;直接傳到了centos&#xff0c;然后再導入到docker里面&#xff0c;然后進行運行&#xff0c;主要是發現運行的時候&#xff0c;老是提示一些庫的問題&#xff0c;還有就是一些python老…

PowerShell來關閉 Windows 安全中心

你可以使用 PowerShell 來關閉 Windows 安全中心的盾牌圖標&#xff08;通知&#xff09;。以下是幾種方法&#xff0c;包括禁用通知、關閉 Windows Defender&#xff08;不推薦&#xff09;或調整注冊表。方法 1&#xff1a;禁用 Windows 安全中心通知&#xff08;推薦&#x…

基于深度學習的老照片修復系統

背景隨著時間的推移&#xff0c;老照片可能會因褪色、損壞或曝光不當而影響其視覺質量。這些珍貴的影像承載著歷史和回憶&#xff0c;但由于物理損耗&#xff0c;它們的觀賞價值和可讀性逐漸下降。為了恢復這些照片的清晰度和色彩&#xff0c;本項目采用深度學習與先進的圖像處…

深入解析Tomcat目錄結構

Apache Tomcat 是一個強大的 Servlet 容器,它不僅支持 Java Servlet 和 JSP 技術,還提供了豐富的功能來幫助開發者構建和部署動態的 Web 應用。為了更好地理解和使用 Tomcat,了解其文件結構和組成部分是至關重要的。本文將深入探討 Tomcat 的目錄結構及其各個組件的作用。 …

專題:2025抖音電商與微短劇行業研究報告|附150+份報告PDF匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p43595 當618大促的硝煙散去&#xff0c;抖音電商的生態分化愈發刺眼&#xff1a;服飾內衣以27.5%的份額穩坐頭把交椅&#xff0c;而無數中小商家卻在“流量荒”中掙扎。這場看似繁榮的盛宴里&#xff0c;平臺規則如同無形的手&#x…

3.Ansible自動化之-編寫和運行playbook

3.Ansible編寫和運行 Playbook Playbook 介紹 如果把 Ansible 的ad-hoc命令比作 “一次性腳本”&#xff08;適合臨時執行單個簡單任務&#xff09;&#xff0c;那么Playbook就是 “可重復執行的程序”&#xff08;適合復雜、多步驟的管理流程&#xff09;。 舉個例子&#…