我正在开发一个Laravel软件包,但我对作曲家自动加载有问题。我的软件包在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 'SalibhdrTyphoonLaravelProvidersLumenServiceProvider' not found
,如果我检查类是否具有class_exists('SalibhdrTyphoonLaravelProvidersLumenServiceProvider')
功能,它将返回false
。但是,如果我检查SalibhdrTyphoonTelegramApi
是否存在,则返回true
。
我检查了autoload_classmap
文件,并注意作曲家包括Telegram
子文件夹下的所有类,但不包括Laravel
子文件夹。
为什么作曲家会这样奇怪?为什么它包括一个子文件夹而不是另一个子文件夹?这是我每天都在做的事情,从未见过这样的事情。
我迫切需要帮助。任何帮助将不胜感激
您正在尝试初始化SalibhdrTyphoonLaravelProvidersLumenServiceProvider
,但在您的作曲家中是"SaliBhdr\Typhoon\": "src/"
。
请注意您的作曲家中的B
。PHP类对案例敏感,因此您必须确保它既是小写或大写。
如果修改composer.json
。
composer dumpautoload