Understanding PSR-4



我的文件结构如下:

├─ 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 正是为了删除这些只有一个子目录而没有其他文件的目录。

相关内容

  • 没有找到相关文章

最新更新