php - 自定义包的类不会使用 composer autoloader 自动加载
问题描述
我正在尝试在 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
参数将我的类包含在自动加载器中,但是我的类没有加载。
您对如何通过作曲家的自动加载器加载我的课程有任何想法吗?
谢谢
解决方案
我建议你使用 PSR-4 自动加载。请记住,您必须在命名空间声明的末尾放置尾随反斜杠:
"autoload": {
"psr-4": {
"Gabyfle\\": "src/"
}
},
来自作曲家文档的引用:
请注意,与旧的 PSR-0 样式相反,前缀 (Foo\\) 不存在于文件路径中。
并且:
命名空间前缀必须以 \ 结尾以避免相似前缀之间的冲突。例如 Foo 将匹配 FooBar 命名空间中的类,因此尾部的反斜杠解决了这个问题:Foo\ 和 FooBar\ 是不同的。
因此,如果您从 psr-0 切换到 psr-4,请记住这一点
推荐阅读
- java - 新手 Java 问题 - 来自重载构造函数的对象数组没有返回正确的值?
- git - Git:如何将 dist 目录推送到同一存储库的单独分支
- javascript - array.prototype.sort 目前有不同的顺序?
- firebase - FirebaseAuth当前用户在调用注销后没有返回null?
- python - Zoho 调用 API 的问题 {"code":1038,"message":"JSON 格式不正确»}
- android - 如何从 Fragment 类到 Activity 类以及从 Activity 类到 Fragment 类
- java - 如何在 Java 中合并两个流?
- r - 如何对R中的汇总数据进行逻辑回归?
- android - 仅使用一个 Firebase 项目,我可以为同一移动设备上的不同应用设置不同的令牌吗?
- sql - 错误地使用连接?