TP6多應用模式下獲取不到當前控制器和方法名 - php中文網

2020-12-06 php中文網

前言:最近使用TP6做了一套項目,發現多應用模式下使用

$this->request->controller()和 $this->request->action() 無法獲取到當前的控制器和方法名,自己研究了一下,找了個笨辦法,記錄一下,如果大家有更好的辦法,歡迎留言。

開發環境

windwos 10PHP 7.3TP 6.0.2

問題重現

1、先創建一個新項目

composer create-project topthink/think tp60cd tp60/composer require topthink/think-multi-app

2、修改 /config/app.php 加入下面兩行

//開啟應用快速訪問'app_express' => true,

3、修改 /config/route.php

// 是否強制使用路由'url_route_must' => true,// 路由是否完全匹配'route_complete_match' => true,

4、刪除 /app 下面的 controller 目錄,創建 index 文件夾,目錄結構如下:

5、上代碼,IndexController.php 的內容:

<?phpnamespace app\index\controller;use app\BaseController;class IndexController extends BaseController{public function index(){ dd($this->request->controller(), $this->request->action()); }}

/app/index/route/app.php 的內容

<?phpuse think\facade\Route;Route::group(function () {Route::get('/', 'IndexController@index');})->prefix('\app\index\controller\\');

6、啟動然後訪問該應用,控制器與方法輸出都是空。

php think run

解決方案

調試發現 $this->request對象的 rule裡面有當前控制器和方法名

可使用 $this->request->rule()->getName()$this>request>rule()>getRoute()獲取,

謎之操作

另外調試發現,Controller的 init方法好像沒執行,在 Request裡面打兩個斷點,一樣可以訪問,可以用上面的方法獲取到控制器和方法名。

相關焦點

  • PHP文件包含漏洞利用思路與Bypass總結手冊(二)
    /var/log/auth.log包含environphp的4種常見運行方式SAPI:Server Application Programming Interface服務端應用編程埠。他就是php與其他應用交互的接口,php腳本要執行有很多中方式,通過web伺服器,或者直接在命令行行下,也可以嵌入其他程序中。
  • 怎麼理解php中的數組?php的數組創建和使用方法是什麼?
    php數組的定義數組就是值類型相同的變量的集合,在PHP中的一種常用的複合數據類型,數據可以存放很多的數據,可以存儲任何類型的數據。我們可以把變量當做一個包含值得盒子,那麼可以把數組當做當成一個帶有隔層的盒子,每一層都可以存放一個值。
  • MVC設計模式(模型-視圖-控制器)設計模式介紹
    2.1 MVC中的模型、視圖和控制類   (1) 模型包含了應用問題的核心數據、邏輯關係和計算功能,它封裝了所需的數據,提供了完成問題處理的操作過程。控制器依據I/O的需要調用這些操作過程。模型還為視圖獲取顯示數據而提供了訪問其數據的操作。   這種變化-傳播機制體現在各個相互依賴部件之間的註冊關係上。
  • PHP如何獲取一周的第一天
    使用PHP strtotime()函數可以獲取一周的第一天。此函數返回默認時間變量timestamp,然後使用date()函數將時間戳日期轉換為可理解的日期。strtotime()函數: strtotime()函數通過解析時間字符串返回時間戳中的結果。
  • 高效率的多相DC/DC控制器應用電路原理圖
    此類功率輸送方法的效率達不到 100%,而且會產生大量的熱量。必須謹慎和持續不斷地管理這些熱量,以使系統在其規定的工作溫度範圍內運行。無論冷卻系統的類型和效率如何,都必須採取某種方法將熱量從數據中心去除。而要做到這一點,就必需使用額外的能量來運作冷卻設施。 據估計,由於低效率和冷卻系統所造成數據中心增加額外功耗與伺服器、存儲和網絡設備所消耗的功率量大致相等。
  • PHP 框架 QueryPHP 1.0.3 發布,兼容 PHP 8.0 和 PHP 8.1
    路由系統 (框架提供 MVC 自動路由並能夠智能解析 Restful 請求和基於 OpenApi 3.0 規範的 swagger-php 註解路由,文檔路由一步搞定。) 百分之百單元測試覆蓋(超過 3500 例測試用例保證系統可靠性和可持續維護。) PHP 7 嚴格模式 (每一個 PHP 腳本都是 strict_types=1,嚴格模式可以避免很多弱類型帶來潛在 BUG。)
  • JavaScript和Underscore.js在PHP中輸入方法 - 智能甄選
    PHP雖然沒有改變那麼多。顯然,它註定會永遠遭受自己的遺產。它到達90年代中期,作為一個簡單的CGI應用程式來維護Rasmus Lerdorf的主頁,並且更像是自發地發展起來的。這導致語法不一致,功能和基於OOP的資產混合在一起,缺乏體面的語言規範。所以每次我切換到PHP時,我都會錯過JavaScript的合理性,可預測性和靈活性。
  • php知識大通關——常見函數功能
    php常見函數1、在php中,下面哪個方法使用 PHP 連接 MySQL 資料庫?2、在php中,下面哪個函數用於在 PHP 中獲取環境變量? search() environment() env() getenv()解析:PHP 中提供了一個 getenv() 函數來訪問所有環境變量的值。3、下面哪個異常處理類方法在發生錯誤時檢索錯誤消息?
  • PHP實現最簡單的聊天室應用
    介紹聊天應用程式在網上非常常見。開發人員在構建這類應用程式時的選擇也很多。這篇文章介紹了如何實現基於PHP-AJAX的聊天應用程式,並且不需要刷新頁面就可以發送和接收消息。
  • Php常見問題總結
    > 然後在php.ini中設置:include_path = "c:/php",並將debug.php放在此文件夾,以後就可以在每個網頁裡包含此文件,查看得到的變量名和值.php $arr = get_defined_functions(); Function php() {}echo   "<pre>"; Echo   "這裡顯示系統所支持的所有函數,和自定以函數php\n";print_r($arr); echo   "</pre>"; ?
  • 無錫英之力:機組冷凝壓力控制器和噴液控制器應用講解
    無錫英之力總經理李斌,簡單介紹了冷凝壓力控制器相關產品及相關原理,介紹了這款冷凝控制器的核心競爭力效果顯著,節能效果顯著,並安裝簡單,大大的提高了企業美譽度。李總代表英之力並自信的向消費者承諾,產品擁有絕對的質量保證,希望不斷研發更多新產品。
  • PFC控制器方案NCP1611的典型應用
    其中,安森美半導體最新推出的NCP1611 PFC控制器採用創新的電流控制頻率反走(Current Controlled Frequency Foldback,CCFF)方法驅動PFC升壓級,功率因數接近1,高驅動能力為-500 mA/+800 mA,Vcc範圍從9.5 V到35 V,具有非閉鎖和過壓保護、電壓檢測、軟起動和過流限制等功能。
  • php中函數禁用繞過的原理與利用
    Realpath同樣是基於報錯,但realpath在windows下可以使用通配符<和>進行列舉,腳本摘自p神博客:<?那麼在學習漏洞利用之前,我們有必要了解兩個環境變量,PHP_VALUE:可以設置模式為PHP_INI_USER和PHP_INI_ALL的選項PHP_ADMIN_VALUE:可以設置所有選項(除了disable_function)那麼以p神文中的利用方式我們需要滿足三個條件:找到一個已知的php文件利用上述兩個環境變量將
  • 3分鐘短文|PHP獲取函數參數名,和類定義的常量,都要反射!
    反射獲取函數形參列表我們在寫程序的時候,不可能所有功能邏輯全堆到一個方法裡那麼對於一個聲明的函數,類似下面這樣:function test($name, $age) {}是否有這樣的函數,可以直接獲取到 test 函數的傳參名呢?
  • 關於PHP 5.4 你所需要知道的
    廢除了register_globals, magic_quotes以及安全模式。 另外值得一提的是多字節支持已經默認啟用了,default_charset從ISO-8859-1已經變為UTF-8. 默認發送「Content-Type: text/html; charset=utf-8」,你再也不需要在HTML裡寫meta tag,也無需為UTF-8兼容而傳送額外的header了。
  • PHP正則表達式的快速學習方法
    由此可見,正則表達式已經超出了某種語言或某個系統的局限,成為人們廣為接受的概念和功能。正則表達式可以讓用戶通過使用一系列的特殊字符構建匹配模式,然後把匹配模式與數據文件、程序輸入以及WEB頁面的表單輸入等目標對象進行比較,根據比較對象中是否包含匹配模式,執行相應的程序。  舉例來說,正則表達式的一個最為普遍的應用就是用於驗證用戶在線輸入的郵件地址的格式是否正確。
  • php 導出 Excel
    { //alert('您取消了'); //取消了 } });後臺的控制器
  • 理想二極體控制器在電源「或」應用中免除了耗能的二極體
    LTC4412通過提供一個低損耗和接近理想的二極體控制器功能而簡化了PowerPath管理和控制。任何可以採用一個二極體「或」來實現電源之間切換的電路都會因採用LTC4412而獲益。LTC4412理想二極體的正向壓降遠遠低於常規二極體,而且,其反向漏電流也較小(見圖1)。微小的正向壓降減少了功耗和自發熱,從而延長了電池的使用壽命。
  • 14個編寫Spring MVC控制器的實用小技巧
    由於其簡單方便,且不再需要對配置文件中的控制器聲明beans,這一方法非常實用。注意:使用@controller註解可以創建一個多動作控制器類,可同時處理多個不同的請求。,則可生成多動作控制器。8.將對象放入模型在MVC架構的應用程式中,控制器將數據輸入到模型中,該模型則被用在視圖中。