php:composer自动加载无法处理src文件夹中的多个目录

php:composer自动加载无法处理src文件夹中的多个目录,php,composer-php,autoload,php-7,Php,Composer Php,Autoload,Php 7,这是我的文件夹结构 在我的包/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": {

这是我的文件夹结构

在我的
包/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()
行中遇到了以下错误

致命错误:未捕获错误:找不到类“Test\First”

但是类
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


阅读有关的部分的更多信息。

您只声明了一个前缀驻留在
src
中。添加另一个:

"autoload": {
    "psr-0": {
        "HelloWorld": "src/",
        "Test": "src/"
    }
}
还要注意,当您使用名称空间时,PSR-4更适合:

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

如何为composer.json中的
Test
文件夹创建条目这实际上是一个错误的建议,因为您的自动加载说明所有类都可以在
src
中找到,但这对大多数类来说都不正确。您可以根据需要添加任意多的名称空间前缀和目录,任何长度超过
的都比您的解决方案好。