Composer class 即使存在也未找到
Composer class not found even if it exists
我正在开发一个 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 是否存在 class_exists('Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider')
函数,它 returns false
。但是如果我检查 Salibhdr\Typhoon\Telegram\Api
是否存在 returns true
.
我检查了 autoload_classmap
文件并注意到作曲家包括 Telegram
子文件夹下的所有 classes 但不包括 Laravel
子文件夹。
为什么作曲家的行为如此怪异?为什么它包含一个子文件夹而不包含另一个?这是我每天都在做的事情,从来没有见过这样的事情。
我迫切需要帮助。任何帮助将不胜感激
您正在尝试初始化 Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider
,但在您的 composer 中它是 "SaliBhdr\Typhoon\": "src/"
。
注意作曲家的大写 B
。 PHP 类 区分大小写,因此您必须确保它是小写或大写。
另外确保 运行 composer dumpautoload
如果你修改 composer.json
.
我正在开发一个 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 是否存在 class_exists('Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider')
函数,它 returns false
。但是如果我检查 Salibhdr\Typhoon\Telegram\Api
是否存在 returns true
.
我检查了 autoload_classmap
文件并注意到作曲家包括 Telegram
子文件夹下的所有 classes 但不包括 Laravel
子文件夹。
为什么作曲家的行为如此怪异?为什么它包含一个子文件夹而不包含另一个?这是我每天都在做的事情,从来没有见过这样的事情。
我迫切需要帮助。任何帮助将不胜感激
您正在尝试初始化 Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider
,但在您的 composer 中它是 "SaliBhdr\Typhoon\": "src/"
。
注意作曲家的大写 B
。 PHP 类 区分大小写,因此您必须确保它是小写或大写。
另外确保 运行 composer dumpautoload
如果你修改 composer.json
.