首页 > 建站教程 > PHP框架 >  ThinkPHP6安装多应用后,提示控制器不存在正文

ThinkPHP6安装多应用后,提示控制器不存在



ThinkPHP6安装多应用后,提示控制器不存在。ThinkPHP6默认是单应用模式,需要多应用时,就要安装多应用模式扩展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://127.0.0.1/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、重新下载框架,重新安装多应用扩展,结果还是不行。

解决办法:
1、思路
为什么提示 “控制器不存在:app\controller\Admin”?

因为安装多应用模式扩展执行的指令没有生效 php think service:discover 自动注册扩展包的系统服务。

为什么自动注册拓展包服务失败,详见代码:

vendor/topthink/framework/src/think/console/command/ServiceDiscover.php

第34行代码$package['extra']['think']['services']为空,导致生成自动注册服务文件

services.php 中没有注册的代码。

2、解决方法

首先找到你加入的拓展,在这里:

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的数组中。