下面由thinkphp教程欄目給大家介紹ThinkPHP6提示控制器不存在的解決方法,希望對(duì)需要的朋友有所幫助!
ThinkPHP 6 提示控制控制器不存在
thinkphp 6 默認(rèn)是單應(yīng)用模式,需要多應(yīng)用時(shí),就要安裝多應(yīng)用模式擴(kuò)展think-multi-app
。
composer require topthink/think-multi-app
然后刪除框架自帶的appcontroller目錄,創(chuàng)建自己需要的應(yīng)用目錄.
例如:appindexcontrollerIndex.php
<?php namespace appindexcontroller;use appBaseController;class Index extends BaseController { public function index() { return 'hello index'; } }
訪(fǎng)問(wèn)這個(gè)方法:http://www.study_tp6.com/public/index.php/index/index/index
結(jié)果提示:控制器不存在 appcontrollerindex
查找原因:
1、按照官方文檔安裝了think-multi-app擴(kuò)展,提示安裝成功。
2、控制器的命名空間也沒(méi)寫(xiě)錯(cuò)。
3、訪(fǎng)問(wèn)路徑與目錄名、控制器、方法名一樣,訪(fǎng)問(wèn)地址是沒(méi)錯(cuò)的。
4、網(wǎng)上有說(shuō),在配置文件config/app.php中,將 'auto_multi_app' => flase, 改為true,
但我使用的版本是ThinkPHP 6.0.4,配置文件中并沒(méi)有這個(gè)參數(shù),試了試,加上也沒(méi)用。
5、難道下載的框架有問(wèn)題?重新下載框架,重新安裝多應(yīng)用擴(kuò)展,結(jié)果還是不行。
解決辦法:
感謝 【ikgade】在官方的評(píng)論分享,試了試,解決了這個(gè)坑。
這是作者的思路和方案:
為什么提示 “控制器不存在:appcontrollerAdmin”? 因?yàn)榘惭b多應(yīng)用模式擴(kuò)展執(zhí)行的指令沒(méi)有生效 php think service:discover 自動(dòng)注冊(cè)擴(kuò)展包的系統(tǒng)服務(wù)。 為什么自動(dòng)注冊(cè)拓展包服務(wù)失敗,詳見(jiàn)代碼: vendor/topthink/framework/src/think/console/command/ServiceDiscover.php 第34行代碼$package['extra']['think']['services']為空,導(dǎo)致生成自動(dòng)注冊(cè)服務(wù)文件 services.php 中沒(méi)有注冊(cè)的代碼。 天坑! 怎么解決呢? 首先找到你加入的拓展,在這里: vendor/composer/installed.json 然后把所有的$package['extra']['think']['services']復(fù)制粘貼到services中,或者修改以下文件的代碼: vendor/topthink/framework/src/think/console/command/ServiceDiscover.php
復(fù)制vendor/composer/installed.json中的services值到vender/services的數(shù)組中。