php:composer自动加载不能处理src文件夹

时间:2017-03-10 07:34:49

标签: php composer-php autoload php-7

这是我的文件夹结构

enter image description here

我的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()

中收到以下错误
  

致命错误:未捕获错误:未找到类'Test \ First'

但是First.php文件夹下存在班级src\Test

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

你的composer.json包含一些条目,这使得它加载了HelloWorld,但文件夹没有这样的条目" Test"。

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

答案 2 :(得分:-2)

composer.json更改为:

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

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

详细了解autoloadcomposer.json部分。