即使存在也找不到 Composer 类

Posted

技术标签:

【中文标题】即使存在也找不到 Composer 类【英文标题】:Composer class not found even if it exists 【发布时间】:2019-11-10 16:17:45 【问题描述】:

我正在开发一个 Laravel 包,但我遇到了 composer 自动加载的问题。 我的包在 src 文件夹下有 2 个文件夹。其中一个名为Laravel,另一个名为Telegram。这是包结构:

./packages
.../typhoon
...../src
......./Laravel
........./Providers
............LumenServiceProvider.php
............LaravelServiceProvider.php
......./Telegram
..........Api.php
.....composer.json

这个包是在SaliBhdr/Typhoon命名空间下开发的。

我在 Laravel 的 composer 文件中添加了 packages/typhoon/src 目录,如下所示:

    "autoload": 
        "psr-4": 
            "App\\": "app/",
            "SaliBhdr\\Typhoon\\" : "packages/typhoon/src/"
        
    ,

并像这样在包 composer.json 文件中添加src/ 地址:

    "autoload": 
        "psr-4": 
            "SaliBhdr\\Typhoon\\": "src/"
        
    ,

这是奇怪的行为开始。当我执行php artisan serve 命令时,Laravel 会抛出一个错误:

 Class 'Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider' not found 

如果我使用class_exists('Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider') 函数检查该类是否存在,它会返回false。但是如果我检查Salibhdr\Typhoon\Telegram\Api 是否存在,它会返回true

我检查了autoload_classmap 文件,发现composer 包含Telegram 子文件夹下的所有类,但不包括Laravel 子文件夹下的所有类。

为什么作曲家的行为如此怪异?为什么它包含一个子文件夹而不包含另一个?这是我每天都在做的事情,从来没有见过这样的事情。

我迫切需要帮助。任何帮助将不胜感激

【问题讨论】:

你的composer.json在哪里? @ChinLeung 它在typhoon 文件夹中 您是否检查过LumenServiceProvider 中的类名是否与文件名匹配?另外,如果您尝试使用LaravelServiceProvider,它是否返回true? @ChinLeung 我已经完成了所有必要的检查。不,它返回与 LaravelServiceProvider 相同的输出。 laravel 和 lumen 服务提供者都是从抽象的 TelegramServiceProvider 扩展而来的。 laravel 文件夹中还有其他类,其中一些不包含在作曲家中。但包含电报文件夹中的所有文件 我无法重现您的问题...我已经尝试使用您的文件结构,它对我来说效果很好。你跑composer dumpautoload了吗? 【参考方案1】:

您正在尝试初始化 Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider,但在您的作曲家中它是 "SaliBhdr\\Typhoon\\": "src/"

注意作曲家中的大写 B。 PHP 类是区分大小写的,所以你必须确保它要么都是小写,要么都是大写。

如果您修改composer.json,请确保运行composer dumpautoload

【讨论】:

哦!我没有注意到这一点,我不知道我为什么会犯这个错误。非常感谢您的宝贵时间

以上是关于即使存在也找不到 Composer 类的主要内容,如果未能解决你的问题,请参考以下文章

即使已安装 Composer 也找不到 ext-mbstring

在 Mac 上安装 Laravel 会抛出 laravel,即使在设置 PATH 后也找不到

使用 Composer 2 自动加载器的 Laravel 基类找不到特征?

Laravel - 即使路线存在也找不到页面

即使存在,诗歌也找不到依赖的版本

JasperException - 即使存在标签也找不到文件