自动加载本地编写器包

  • 本文关键字:加载 php composer-php
  • 更新时间 :
  • 英文 :


我读了几个关于这个话题的问题,但我仍然不明白。我有一个库,我想把~/vendor文件夹和使用内置的作曲家自动加载器。我的包裹叫"哔"。目录结构为

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 { ....

作曲家。Json以

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

和still,当我尝试:

$r = new BeepRequest();

我得到:

Fatal error: Class 'BeepRequest' not found in ....

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

你知道我做错了什么吗?

谢谢

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

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

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

如果你自动加载一个类BeepRequest,它将在src/Beep/Beep/Request.php中被搜索。

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

这里几乎相同,但是因为"Beep"首先被剥离了类名,剩下的类名是Request,然后搜索路径是src/Beep/Request.php

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

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

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

相关内容

  • 没有找到相关文章

最新更新