Composer 自动加载器找不到类

Posted

技术标签:

【中文标题】Composer 自动加载器找不到类【英文标题】:Composer autoloader cannot find class 【发布时间】:2020-01-21 19:13:03 【问题描述】:

我对类的类加载有疑问。

安装我的包后找不到类,这是它的错误消息:

   Illuminate\Contracts\Container\BindingResolutionException  : Target class [SundayIT\ChatbotAdmin\Commands\DBM_RealtimeStats] does not exist.

这是自动加载器遗漏的类的前几行:

<?php
    namespace SundayIT\ChatbotAdmin\Commands;

    use Illuminate\Console\Command;
    use Illuminate\Support\Facades\DB;
    use Symfony\Component\Console\Input\InputInterface;
    use Symfony\Component\Console\Output\OutputInterface;

    class DBM_RealtimeStats extends Command

这是包的composer.json文件的相关部分

    "autoload": 
        "psr-4": 
            "SundayIT\\ChatbotAdmin\\": "src/"
        
    ,

这是文件结构:

我错过了什么?我已经尝试在这里检查其他问题,但我还没有找到解决方案。谢谢

【问题讨论】:

感谢您的回答,是的,我确实尝试过,它给出了相同的消息:` Illuminate\Contracts\Container\BindingResolutionException :目标类 [SundayIT\ChatbotAdmin\Commands\DBM_RealtimeStats] 不存在。在 C:\Users\molba\PhpstormProjects\example_chatbot\vendor\laravel\framework\src\Illuminate\Container\Container.php:809 ` 您是否尝试将您的班级重命名为DbmRealtimeStats 并将文件重命名为DbmRealtimeStats.php 尝试在 composer.json 中添加 classmap 部分 > 自动加载部分 【参考方案1】:

根据PSR-4 standard 类名不应包含下划线。

下划线在全限定类名的任何部分都没有特殊含义。

这就是为什么将类重命名为 DbmRealtimeStats 并将文件重命名为 DbmRealtimeStats.php 有效(如 here 所述)。

【讨论】:

以上是关于Composer 自动加载器找不到类的主要内容,如果未能解决你的问题,请参考以下文章

使用命名空间和自动加载器找不到类

Composer 自动加载器在运行测试时找不到 PHPUnit

java 主启动类找不到

即使存在也找不到 Composer 类

自动加载

本地目录自动加载 - “找不到类”