我的文件结构如下:
├─ 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
。
答案 0 :(得分:3)
PSR-4在搜索路径中不包含前缀,PSR-0会这样做。
因此Acme\Universal
"Acme\\": "src/"
src/Universal.php
将在src/Acme/Universal.php
中使用PSR-4进行搜索,并在src/Acme/
中使用PSR-0进行搜索。
在这种情况下,您应该将src/
目录的内容移至{{1}}。创建PSR-4只是为了删除这些目录只有一个子目录而没有其他文件。