自动加载本地作曲家包

got*_*tha 4 php composer-php

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

vendor/beep
vendor/beep/beep
vendor/beep/beep/src
vendor/beep/beep/src/Beep
vendor/beep/beep/src/Beep/Request.php
Run Code Online (Sandbox Code Playgroud)

Request.php以:

namespace Beep;
class Request { ....
Run Code Online (Sandbox Code Playgroud)

composer.json以.结尾

"autoload": {
   "psr-0": {"Beep\\": "src/Beep"}
}
Run Code Online (Sandbox Code Playgroud)

而且当我尝试做的时候:

$r = new Beep\Request();
Run Code Online (Sandbox Code Playgroud)

我明白了:

Fatal error: Class 'Beep\Request' not found in ....
Run Code Online (Sandbox Code Playgroud)

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

知道我做错了什么吗?

谢谢

Sve*_*ven 8

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

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

"psr-0": {"Beep\\": "src/Beep"}
Run Code Online (Sandbox Code Playgroud)

如果你自动加载一个类\Beep\Request,它将被搜索到src/Beep/Beep/Request.php.

"psr-4": {"Beep\\": "src/Beep"}
Run Code Online (Sandbox Code Playgroud)

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

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

"psr-4": {"Beep\\": "src"}
Run Code Online (Sandbox Code Playgroud)

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

  • 那个添加是错误的。作曲家会照顾一切,只要你做对了...... (2认同)