为什么'composer dumpautoload -o'修复'Class not found'PHP错误?

问题描述 投票:1回答:1

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

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

project composer.json

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

package src / ApiRequest.php

<?php

namespace Company;

class APIRequest
{
    ...
}

package composer.json

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

当我打电话给包裹时

\Company\APIRequest::run();

我正在

Message: Class 'Company\APIRequest' not found

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

我希望composer installcomposer update应该足够;我对外部软件包没有任何问题。

我在这里想念什么吗?

php laravel-5 dependencies composer-php autoload
1个回答
1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.