【问题标题】:Custom package's class won't auto-load with composer autoloader自定义包的类不会使用 composer autoloader 自动加载
【发布时间】:2019-04-16 13:35:23
【问题描述】:

我正在尝试在 Packagist.org 上发布一个新包,但我在使用自动加载系统时遇到了一些问题。

当我正在安装我的包 (https://packagist.org/packages/gabyfle/gsteam-auth) 时一切正常,但是当我通过 PHP 加载它时:

require __DIR__ . "/vendor/autoload.php";

$testing = new \Class\SteamAuth('test', 'test');

我收到一个错误,告诉我找不到 Class 命名空间。

Fatal error: Uncaught Error: Class 'Class\SteamAuth' not found in <path>\gSteam-test\testing.php:4 Stack trace: #0 {main} thrown in <path>\gSteam-test\testing.php on line 4

我已经尝试了所有不同的自动加载约定(PSR0 PSR4),我还尝试通过classmap 参数将我的类包含在自动加载器中,但是我的类没有加载。

你知道如何让我的类通过作曲家的自动加载器加载吗?

谢谢

【问题讨论】:

    标签: php composer-php autoload


    【解决方案1】:

    我建议您使用 PSR-4 自动加载。请记住,您必须在命名空间声明的末尾添加尾随反斜杠:

    "autoload": {
        "psr-4": {
            "Gabyfle\\": "src/"
        }
    },
    

    来自作曲家文档的引用:

    请注意,与旧的 PSR-0 样式相反,前缀 (Foo\\) 不存在于文件路径中。

    还有:

    命名空间前缀必须以 \ 结尾以避免相似前缀之间的冲突。例如 Foo 将匹配 FooBar 命名空间中的类,因此尾部的反斜杠解决了这个问题:Foo\ 和 FooBar\ 是不同的。

    因此,如果您从 psr-0 切换到 psr-4,请记住这一点

    【讨论】:

    • 我切换到psr-4,但还是出现这个错误... 类根本没有加载。
    • 你是在本地测试还是通过composer install安装?如果是前者,您是否运行 composer dump-autoload 来更新作曲家更改?
    • 我在本地测试。我跑了composer dump-autoload它说我加载了2个类。但这很奇怪,因为我总共有 3 个类:2 个用于我自己的库,1 个用于依赖项
    • 你能发布你的文件/文件夹结构吗?当我从 Github 下载你的包时,用我在答案中输入的内容编辑了 composer.json,运行 composer dump-autoload 并且一切正常。所以我无法重现错误。也许您也可以将整个测试文件夹上传到 github 的自己的测试存储库中
    【解决方案2】:

    感谢@mdexp,我发现我的班级出了什么问题。 我在一个文件中定义了两个类,这与 PSR-4 规范不匹配。

    我刚刚从文件中删除了一个类,现在一切正常。

    谢谢!

    【讨论】:

      猜你喜欢
      • 2019-11-06
      • 2016-04-17
      • 2016-06-10
      • 2013-06-16
      • 1970-01-01
      • 2013-01-13
      • 2019-12-05
      • 2013-02-17
      • 1970-01-01
      相关资源
      最近更新 更多