1

我的文件结构如下:

├─ vendor/
└─ src/
   ├─ Acme/
   │  ├─ Foul/
   │  │   └─ Nest.php
   │  └─ Universal.php
   └─ Foo.php

我正在尝试使用 Composer 使用 PSR-4 自动加载。这段代码:

$obj = new Acme\Universal();

给我一个错误:Fatal error: Class 'Acme\Universal' not found in ...

如果我在中使用此代码段composer.json

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

但是如果我使用

"autoload": {
    "psr-4": {"Acme\\": ["src/", "src/Acme/"]}
}

一切正常。我什至可以访问

$otherObj = new Acme\Foul\Nest();

请注意,我composer install每次更改composer.json文件时都会运行。

4

1 回答 1

3

PSR-4 不包含要搜索的路径中的前缀,而 PSR-0 包含。

因此Acme\Universal"Acme\\": "src/"将在src/Universal.phpPSR-4 和src/Acme/Universal.phpPSR-0 中搜索 with。

在这种情况下,您应该将src/Acme/目录的内容移动到src/. PSR-4 的创建正是为了删除这些只有一个子目录而没有其他文件的目录。

于 2015-01-02T18:32:47.440 回答