解决ThinkPHP6提示控制器不存在问题
时间:2021-01-07
来源:互联网
ThinkPHP6提示控制器不存在怎么解决呢?下面由PHP爱好者分享给大家介绍ThinkPHP6提示控制器不存在的解决方法,希望对需要的朋友有所帮助!
ThinkPHP 6 提示控制控制器不存在怎么解决?
thinkphp 6 默认是单应用模式,需要多应用时,就要安装多应用模式扩展think-multi-app。
composer require topthink/think-multi-app
然后删除框架自带的app\controller目录,创建自己需要的应用目录.
例如:\app\index\controller\Index.php
namespace app\index\controller;use app\BaseController;class Index extends BaseController
{ public function index()
{ return 'hello index';
}
}
访问这个方法:http://www.study_tp6.com/public/index.php/index/index/index
结果提示:控制器不存在 app\controller\index
查找原因:
1、按照官方文档安装了think-multi-app扩展,提示安装成功。
2、控制器的命名空间也没写错。
3、访问路径与目录名、控制器、方法名一样,访问地址是没错的。
4、网上有说,在配置文件config/app.php中,将 'auto_multi_app' => flase, 改为true,
但我使用的版本是ThinkPHP 6.0.4,配置文件中并没有这个参数,试了试,加上也没用。
5、难道下载的框架有问题?重新下载框架,重新安装多应用扩展,结果还是不行。
解决办法:
感谢 【ikgade】在官方的评论分享,试了试,解决了这个坑。
这是作者的思路和方案:
为什么提示 “控制器不存在:app\controller\Admin”?
因为安装多应用模式扩展执行的指令没有生效 php think service:discover 自动注册扩展包的系统服务。
为什么自动注册拓展包服务失败,详见代码:
vendor/topthink/framework/src/think/console/command/ServiceDiscover.php
第34行代码$package['extra']['think']['services']为空,导致生成自动注册服务文件
services.php 中没有注册的代码。
天坑!
怎么解决呢?
首先找到你加入的拓展,在这里:
vendor/composer/installed.json
然后把所有的$package['extra']['think']['services']复制粘贴到services中,或者修改以下文件的代码:
vendor/topthink/framework/src/think/console/command/ServiceDiscover.php
复制vendor/composer/installed.json中的services值到vender/services的数组中。
-
备份助记词还需要备份私钥吗?助记词和私钥哪个重要? 时间:2025-04-30
-
TP钱包主钱包和子钱包助记词一样吗?钱包助记词所有钱包通用吗? 时间:2025-04-30
-
Bybit Web3钱包是什么?特色、功能、使用教学 时间:2025-04-30
-
虚拟币钱包的作用是什么?虚拟币钱包的作用和意义解析 时间:2025-04-30
-
与比特币核心兼容的硬件钱包有哪些?十大比特币硬件钱包盘点 时间:2025-04-30
-
虚拟币钱包怎么弄?虚拟币钱包使用入门教程 时间:2025-04-30
今日更新
-
PHPMySQL连接数据库
阅读:25
-
什么是cookies
阅读:25
-
layui如何获取table某一行的值
阅读:19
-
micin是什么接口?
阅读:35
-
Breeno指令是什么?
阅读:106
-
PHP实现求解最长公共子串问题的方法
阅读:25
-
wmf格式介绍
阅读:28
-
PHP7创建销毁session的实例方法
阅读:24
-
PHP数组和字符串互相转换实现方法
阅读:30
-
php使用unset()删除数组中某个单元(键)的方法
阅读:24