php:composer 自动加载不适用于 src 文件夹内的多个目录

php:composer auto loading not working with multiple directories inside src folder

这是我的文件夹结构

在我的 package/index.php 中是这样的

require_once 'vendor/autoload.php';

use HelloWorld\SayHello;

use Test\First;

 //works fine
 SayHello::world();

//returns classnot found error
 First::sayTest();

在我的 composer.json' 中,我包含了以下内容。

"autoload": {
     "psr-0": {
       "HelloWorld": "src/"
  }
}

但我在 First::sayTest()

中收到以下错误

Fatal error: Uncaught Error: Class 'Test\First' not found

但是 class First.php 存在于 src\Test 文件夹下。

namespace Test;
class First
{
    public static function sayTest()
    {
        echo 'test';
    }
}

您的 composer.json 包含一些条目,这使得它加载 HelloWorld,但是文件夹 "Test".

没有这样的条目

也许将您的 First.php 复制到 HelloWorld 文件夹并更改您在 package.index.php 中的引用可能会有所帮助。

composer.json改为:

"autoload": {
     "psr-4": {
       "": "src/"
  }
}

然后运行composer dump-autoload重新生成vendor/autoload.php.

阅读有关 autoload section of composer.json 的更多信息。

您只声明了一个前缀位于 src。再添加一个:

"autoload": {
    "psr-0": {
        "HelloWorld": "src/",
        "Test": "src/"
    }
}

另请注意,当您使用命名空间时,PSR-4 更适合:

"autoload": {
    "psr-4": {
        "HelloWorld\": "src/HelloWorld/",
        "Test\": "src/Test"
    }
}