我有一个目录,将保留所有"帮助"类和函数.我们调用目录助手.
我想配置PSR-4回退目录以指向此帮助程序目录:
"autoload": {
"psr-4": {
"": "helpers/"
}
}
Run Code Online (Sandbox Code Playgroud)
从Composer文档:
...将在其中查找任何命名空间的后备目录.
所以我的理解是,如果我的目录中的文件/类具有PSR-4兼容名称,我的应用程序应该能够在那里找到它们.
现在我用类Logger创建了一个文件helpers/Logger.php
这个类的名称空间应该是什么,以便1)符合PSR-4和2)只是工作?
我试过了
namespace Logger;
Run Code Online (Sandbox Code Playgroud)
并加载类为
$logger = new Logger();
Run Code Online (Sandbox Code Playgroud)
但我收到错误类记录器未找到
深入研究作曲家代码(loadClass()方法)向我展示它实际上找到并包含文件helpers/Logger.php,但由于某种原因仍无法找到该类.
根据PSR-4命名空间应该是这样的:
namespace Helpers;
Run Code Online (Sandbox Code Playgroud)
类应该像这样调用:
$logger = new Helpers\Logger();
Run Code Online (Sandbox Code Playgroud)
我找不到Class Helpers\Logger,但另外还没有包含文件helpers/Logger.php.
Composer的loadClass()方法中的回退逻辑如下:
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
........
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) …Run Code Online (Sandbox Code Playgroud)