我有一个依赖于私有软件包的Laravel 5.8
项目。
当我运行composer install
时,软件包已安装并显示在供应商文件夹中。
{
...
"require": {
"php": ">=7.0",
"company/api-request": ">=1.0.0"
}
...
}
<?php
namespace Company;
class APIRequest
{
...
}
{
...
"autoload": {
"psr-4": {
"Company\\": "src/"
}
}
...
}
当我打电话给包裹时
\Company\APIRequest::run();
我正在
Message: Class 'Company\APIRequest' not found
我知道PHP语法是正确的,因为当我运行composer dumpautoload -o
时,错误消失了,但是为什么有必要?
我希望composer install
或composer update
应该足够;我对外部软件包没有任何问题。
我在这里想念什么吗?
如果类名和文件名不匹配,将导致自动加载不起作用,因为这是PSR-4的要求。从docs:
终止类名对应于以.php结尾的文件名。文件名必须与终止类名的大小写匹配。
如果是这种情况,composer dumpautoload -o
可能正在为您解决此问题,请参阅this Reddit post:
-o工作的原因,是Composer创建了一个巨大的关联数组,其中classname = filename