下面由thinkphp框架教程欄目給大家介紹關(guān)于thinkphp框架多應(yīng)用模式下獲取不到當(dāng)前控制器和方法名的問題,希望對需要的朋友有所幫助!
前言:最近使用tp6做了一套項(xiàng)目,發(fā)現(xiàn)多應(yīng)用模式下使用 $this->request->controller() 和 $this->request->action() 無法獲取到當(dāng)前的控制器和方法名,自己研究了一下,找了個笨辦法,記錄一下,如果大家有更好的辦法,歡迎留言。
開發(fā)環(huán)境
windwos?10 PHP?7.3 TP?6.0.2
問題重現(xiàn)
1、先創(chuàng)建一個新項(xiàng)目
composer create-project topthink/think tp60 cd tp60/ composer require topthink/think-multi-app
2、修改 /config/app.php 加入下面兩行
//開啟應(yīng)用快速訪問 'app_express' => true,
3、修改 /config/route.php
// 是否強(qiáng)制使用路由 'url_route_must' => true, // 路由是否完全匹配 'route_complete_match' => true,
4、刪除 /app 下面的 controller 目錄,創(chuàng)建 index 文件夾,目錄結(jié)構(gòu)如下:
5、上代碼,IndexController.php 的內(nèi)容:
<?php Namespace appindexcontroller; use appBaseController; class IndexController extends BaseController { public function index() { dd($this->request->controller(), $this->request->action()); } }
/app/index/route/app.php 的內(nèi)容
<?php use thinkacadeRoute; Route::group(function () { Route::get('/', 'IndexController@index'); })->prefix('ppindexcontroller');
6、啟動然后訪問該應(yīng)用,控制器與方法輸出都是空。
php think run
解決方案
調(diào)試發(fā)現(xiàn) $this->request 對象的 rule 里面有當(dāng)前控制器和方法名
可使用 $this->request->rule()->getName()或$this->request->rule()->getRoute() 獲取,
謎之操作
另外調(diào)試發(fā)現(xiàn),Controller 的 init 方法好像沒執(zhí)行,在 Request 里面打兩個斷點(diǎn),一樣可以訪問,可以用上面的方法獲取到控制器和方法名。