自定义包的类不会使用composer autoloader自动加载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义包的类不会使用composer autoloader自动加载相关的知识,希望对你有一定的参考价值。

我正在尝试在Packagist.org上发布一个新软件包,但是我在使用自动加载器系统时遇到了一些麻烦。

我的代码可以在这里找到:https://github.com/Gabyfle/gSteam-Auth当我安装我的软件包(https://packagist.org/packages/gabyfle/gsteam-auth)时一切都很好,但是当我通过php加载它时:

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

$testing = new GabyfleSteamAuth('test', 'test');

我收到一个错误,告诉我无法找到Gabyfle名称空间。

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

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

您是否知道我如何通过作曲家的自动加载器加载我的课程?

谢谢,加布里埃尔

答案

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

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

从作曲家文档引用:

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

并且:

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

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

另一答案

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

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

谢谢 !

以上是关于自定义包的类不会使用composer autoloader自动加载的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你使用Jetpack Compose完成你的自定义Layout

手把手教你使用Jetpack Compose完成你的自定义Layout

在Java中,使用自定义包

包和引入

Java—包的定义和使用

Composer 自动加载自定义类