小编Mak*_*nar的帖子

如何正确使用composer psr-4 fallback

我有一个目录,将保留所有"帮助"类和函数.我们调用目录助手.

我想配置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)

php namespaces composer-php psr-4

7
推荐指数
1
解决办法
417
查看次数

标签 统计

composer-php ×1

namespaces ×1

php ×1

psr-4 ×1