自动加载本地作曲家包

时间:2014-06-25 15:10:13

标签: php composer-php

我已经阅读了关于这个主题的几个问题,但我仍然无法弄明白。 我有一个库,我想放在〜/ vendor文件夹中,并使用内置的composer autoloader。 我的包名叫#34; beep"。目录结构是

vendor/beep
vendor/beep/beep
vendor/beep/beep/src
vendor/beep/beep/src/Beep
vendor/beep/beep/src/Beep/Request.php

Request.php以:

开头
namespace Beep;
class Request { ....

composer.json以

结尾
"autoload": {
   "psr-0": {"Beep\\": "src/Beep"}
}

仍然在我尝试的时候:

$r = new Beep\Request();

我明白了:

Fatal error: Class 'Beep\Request' not found in ....

所有其他软件包的自动加载工作正常。 我正在做作曲家更新,它声称它生成自动加载文件。

知道我做错了吗?

由于

1 个答案:

答案 0 :(得分:8)

当你定义PSR-0自动加载时,类的名称将完全转换为路径和文件名,然后附加到你说的包含前缀的路径。

相反,如果您定义了PSR-4自动加载,则会从类名中删除前面提到的前缀,其余部分将转换为路径和文件名,然后附加到路径中。

"psr-0": {"Beep\\": "src/Beep"}

如果您对课程\Beep\Request进行自动加载,则会在src/Beep/Beep/Request.php进行搜索。

"psr-4": {"Beep\\": "src/Beep"}

此处几乎相同,但由于“Beep”首先被删除了类名,剩下的类名为Request,然后搜索路径为src/Beep/Request.php

但是建议将路径长度保持在最小,所以我建议这样做:

"psr-4": {"Beep\\": "src"}

然后删除可能为空的“Beep”目录(您不能在此级别拥有Beep.php文件,因为它不能包含有效的命名空间类,并且任何其他前缀都不匹配)。您的Beep\Request课程将位于src/Request.php