前言:最近使用TP6做了一套專案,發現多應用模式下使用 $this->request->controller()
和 $this->request->action()
無法獲取到當前的控制器和方法名,自己研究了一下,找了個笨辦法,記錄一下,如果大家有更好的辦法,歡迎留言。
有收穫的話請點個贊
開發環境
windwos 10
問題重現
1、先建立一個新專案
composer create-project topthink/think tp60
cd 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 的內容:
<?php
namespace 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 的內容
<?php
use think\facade\Route;
Route::get('/', 'Index@index');
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
裡面打兩個斷點,一樣可以訪問,可以用上面的方法獲取到控制器和方法名。
本作品採用《CC 協議》,轉載必須註明作者和本文連結