thinkphp6控制器不存在:app\controller\XXX问题解析及解决

转载:http://t.csdn.cn/9vOxU

问题原因在于:

在安装扩展时自动下载更新的vendor/composer/installed.json文件内容和格式与之前的有变化,增加了"packages"节点层次,增加了数组层次。

{
    "packages": [
        {
            "name": "topthink/framework",
            "version": "",
            "version_normalized": "",
            "source": {
                "type": "git",
                "url": "https://github.com/top-think/framework.git",
                "reference": "4b252d78562d4a51a501651f837c26cb9d91624f"
            },
            ......
        }
    ],
    "dev": true,
    "dev-package-names": [
        "symfony/polyfill-php72",
        "symfony/var-dumper",
        "topthink/think-trace"
    ]
}

vendor\topthink\framework\src\think\console\command\ServiceDiscover.php文件在进行获取数据的时候,因为数组层次增加了一个,无法遍历到extra数组中的think元素里面services元素,下面的代码缺少一层遍历:

foreach ($packages as $package) {
    if (!empty($package['extra']['think']['services'])) {
        $services = array_merge($services, (array) $package['extra']['think']['services']);
    }
}

使得自动生成的vendor\services.php文件中的return array为空数组,无法正确加载topthink/think-multi-app,多应用模式失效,就出现了控制器不存在的报错。

修改文件vendor\topthink\framework\src\think\console\command\ServiceDiscover.php文件,增加遍历层次:

foreach ($packages as $package) {
    foreach((array) $package as $subpackage){
        if (!empty($subpackage['extra']['think']['services'])) {
            $services = array_merge($services, (array) $subpackage['extra']['think']['services']);
        }
    }
}

 执行php think service:discover命令,将自动生成vendor\services.php文件即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值