關(guān)于TP6多應(yīng)用模式下獲取不到當(dāng)前控制器和方法名

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

下面由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)如下:

關(guān)于TP6多應(yīng)用模式下獲取不到當(dāng)前控制器和方法名

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 thinkacadeRoute;  Route::group(function () {     Route::get(&#39;/&#39;, &#39;IndexController@index&#39;); })->prefix('ppindexcontroller');

6、啟動然后訪問該應(yīng)用,控制器與方法輸出都是空。

php think run

關(guān)于TP6多應(yīng)用模式下獲取不到當(dāng)前控制器和方法名

解決方案

調(diào)試發(fā)現(xiàn) $this->request 對象的 rule 里面有當(dāng)前控制器和方法名

關(guān)于TP6多應(yīng)用模式下獲取不到當(dāng)前控制器和方法名

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

關(guān)于TP6多應(yīng)用模式下獲取不到當(dāng)前控制器和方法名

謎之操作

另外調(diào)試發(fā)現(xiàn),Controller 的 init 方法好像沒執(zhí)行,在 Request 里面打兩個斷點(diǎn),一樣可以訪問,可以用上面的方法獲取到控制器和方法名。
關(guān)于TP6多應(yīng)用模式下獲取不到當(dāng)前控制器和方法名

關(guān)于TP6多應(yīng)用模式下獲取不到當(dāng)前控制器和方法名

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享