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

declandragon發表於2020-06-22

前言:最近使用TP6做了一套專案,發現多應用模式下使用 $this->request->controller()$this->request->action() 無法獲取到當前的控制器和方法名,自己研究了一下,找了個笨辦法,記錄一下,如果大家有更好的辦法,歡迎留言。

有收穫的話請點個贊

開發環境

windwos 10

PHP 7.3

TP 6.0.2

問題重現

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 資料夾,目錄結構如下:

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

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

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

解決方案

除錯發現 $this->request 物件的 rule 裡面有當前控制器和方法名

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

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

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

謎之操作

另外除錯發現,Controllerinit 方法好像沒執行,在 Request 裡面打兩個斷點,一樣可以訪問,可以用上面的方法獲取到控制器和方法名。
TP6多應用模式下獲取不到當前控制器和方法名

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

本作品採用《CC 協議》,轉載必須註明作者和本文連結
感謝閱讀,有收穫的話不妨點個贊:smiling_imp:

相關文章