为什么 'composer dumpautoload -o' 修复 'Class not found' PHP 错误?
Why does 'composer dumpautoload -o' fix 'Class not found' PHP error?
我有一个 Laravel 5.8
项目依赖于私有包。
当我 运行 composer install
安装包并显示在 vendor 文件夹中时。
项目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 install
或 composer update
应该足够;我对外部包没有问题。
我在这里遗漏了什么吗?
如果 class 名称和文件名不匹配,那将导致自动加载无法工作,因为这是 PSR-4 的要求。来自 docs:
The terminating class name corresponds to a file name ending in .php. The file name MUST match the case of the terminating class name.
如果是这种情况,composer dumpautoload -o
可能会为您解决这个问题,请参阅 this Reddit post:
The reason -o works, is Composer creates a giant associative array where classname = filename
我有一个 Laravel 5.8
项目依赖于私有包。
当我 运行 composer install
安装包并显示在 vendor 文件夹中时。
项目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 install
或 composer update
应该足够;我对外部包没有问题。
我在这里遗漏了什么吗?
如果 class 名称和文件名不匹配,那将导致自动加载无法工作,因为这是 PSR-4 的要求。来自 docs:
The terminating class name corresponds to a file name ending in .php. The file name MUST match the case of the terminating class name.
如果是这种情况,composer dumpautoload -o
可能会为您解决这个问题,请参阅 this Reddit post:
The reason -o works, is Composer creates a giant associative array where classname = filename