我的文件结构如下:
├─ vendor/
└─ src/
├─ Acme/
│ ├─ Foul/
│ │ └─ Nest.php
│ └─ Universal.php
└─ Foo.php
我正在尝试使用作曲家使用 PSR-4 自动加载。此代码:
$obj = new AcmeUniversal();
给我一个错误:Fatal error: Class 'AcmeUniversal' not found in ...
如果我在composer.json
中使用此代码片段:
"autoload": {
"psr-4": {"Acme\": "src/"}
}
但是如果我使用
"autoload": {
"psr-4": {"Acme\": ["src/", "src/Acme/"]}
}
一切正常。我什至可以访问
$otherObj = new AcmeFoulNest();
请注意,每次更改composer.json
文件时,我都会运行composer install
。
PSR-4 不包含要搜索的路径中的前缀,PSR-0 包含前缀。
因此,AcmeUniversal
"Acme\": "src/"
将在src/Universal.php
中搜索PSR-4,src/Acme/Universal.php
使用PSR-0进行搜索。
在这种情况下,应将src/Acme/
目录的内容移动到 src/
。创建 PSR-4 正是为了删除这些只有一个子目录而没有其他文件的目录。