zoukankan      html  css  js  c++  java
  • ThinkPHP 6 提示控制器不存在

    ThinkPHP 6 提示控制控制器不存在


    thinkphp 6 默认是单应用模式,需要多应用时,就要安装多应用模式扩展think-multi-app

    composer require topthink/think-multi-app

    然后删除框架自带的appcontroller目录,创建自己需要的应用目录.

    例如:appindexcontrollerIndex.php

    <?php
    namespace appindexcontroller;
    
    use appBaseController;
    
    class Index extends BaseController
    {
        public function index()
        {
            return 'hello index';
        }
    }

    访问这个方法:http://www.study_tp6.com/public/index.php/index/index/index

    结果提示:控制器不存在 appcontrollerindex


    查找原因:

    1、按照官方文档安装了think-multi-app扩展,提示安装成功。

    2、控制器的命名空间也没写错。

    3、访问路径与目录名、控制器、方法名一样,访问地址是没错的。

    4、网上有说,在配置文件config/app.php中,将 'auto_multi_app' => flase, 改为true,

      但我使用的版本是ThinkPHP 6.0.4,配置文件中并没有这个参数,试了试,加上也没用。

    5、难道下载的框架有问题?重新下载框架,重新安装多应用扩展,结果还是不行。


    解决办法:

    感谢 【ikgade】在官方的评论分享,试了试,解决了这个坑。

    这是作者的思路和方案:

    为什么提示 “控制器不存在:appcontrollerAdmin”?
    因为安装多应用模式扩展执行的指令没有生效 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的数组中。


  • 相关阅读:
    057.Python前端Django模型ORM多表查询
    056.Python前端Django模型ORM多表基本操作
    055.Python前端Django模型ORM
    054.Python之Ubuntu安装Pycharm
    053.Python前端Django框架模板层
    052.Python前端Django框架路由层和视图层
    基数排序
    链表k个节点反向
    链表排序
    函数返回局部指针变量是否可行?
  • 原文地址:https://www.cnblogs.com/gyfluck/p/13846697.html
Copyright © 2011-2022 走看看