为什么“ composer dumpautoload -o”修复了“找不到类” PHP错误?

时间:2019-10-30 13:09:24

标签: php laravel-5 dependencies composer-php autoload

我有一个Laravel 5.8项目,该项目依赖于私有软件包。

我运行composer install时,该软件包已安装并显示在供应商文件夹中。

项目composer.json

{
    ...
    "require": {
        "php": ">=7.0",
        "company/api-request": ">=1.0.0"
    }
    ...
}

软件包src / ApiRequest.php

<?php

namespace Company;

class APIRequest
{
    ...
}

包composer.json

{
    ...
    "autoload": {
        "psr-4": {
            "Company\\": "src/"
        }
    }
    ...
}

当我打电话给包裹时

\Company\APIRequest::run();

我得到了

Message: Class 'Company\APIRequest' not found

我知道PHP语法是正确的,因为当我运行composer dumpautoload -o时错误消失了,但是为什么有必要?

我希望composer installcomposer update就足够了;我对外部软件包没有问题。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

如果类名和文件名不匹配,则将导致自动加载不起作用,因为这是PSR-4的要求。来自docs

  

终止类名对应于以.php结尾的文件名。文件名必须与终止类名的大小写匹配。

如果是这种情况,composer dumpautoload -o可能正在为您解决此问题,请参见this Reddit post

  

-o工作的原因是Composer创建了一个巨大的关联数组,其中classname = filename