即使存在Composer类也没找到

时间:2019-06-28 18:02:59

标签: php laravel composer-php lumen autoloader

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

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

此软件包是在SaliBhdr/Typhoon名称空间下开发的。

我已经在Laravel的作曲者文件中添加了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文件,注意到作曲家包括Telegram子文件夹下的所有类,但不包括Laravel子文件夹下的所有类。

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

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

1 个答案:

答案 0 :(得分:0)

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

请注意作曲家的大写字母B。 PHP类区分大小写,因此您必须确保大小写都小写。

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