我正在尝试在Packagist.org上发布新软件包,但是在使用自动加载器系统时遇到了一些麻烦。
我的代码在这里可用:https://github.com/Gabyfle/gSteam-Auth 当我安装软件包(https://packagist.org/packages/gabyfle/gsteam-auth)时,一切正常,但是当我通过PHP加载它时:
require __DIR__ . "/vendor/autoload.php";
$testing = new \Gabyfle\SteamAuth('test', 'test');
我遇到一个错误,告诉我找不到Gabyfle命名空间。
Fatal error: Uncaught Error: Class 'Gabyfle\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
参数将我的类包含在自动加载器中,但是我的类没有加载。
您对我如何使我的类通过作曲家的自动加载器加载有任何想法吗?
谢谢, 加布里埃尔
答案 0 :(得分:1)
我建议您使用PSR-4自动加载。请记住,您必须在名称空间声明的末尾加上反斜杠:
"autoload": {
"psr-4": {
"Gabyfle\\": "src/"
}
},
来自作曲家文档的报价:
请注意,与较早的PSR-0样式相反,文件路径中不存在前缀(Foo \\)。
还有:
命名空间前缀必须以\结尾,以避免相似前缀之间的冲突。例如,Foo将匹配FooBar命名空间中的类,因此尾随反斜杠可以解决问题:Foo \和FooBar \是不同的。
因此,如果您从psr-0切换到psr-4,请记住这一点
答案 1 :(得分:1)
由于@mdexp,我发现班上出了什么问题。 我在一个文件中定义了两个类,而这与PSR-4规范不匹配。
我刚刚从文件中删除了一个班级,现在一切正常。
谢谢!