我正在尝试将这个作曲家包用于我正在处理https://packagist.org/packages/activecollab/activecollab-sdk的新项目。但是当我尝试创建一个新类时,我会遇到以下错误。
Fatal error: Class 'ActiveCollab\Client' not found
抛出此错误的文件如下所示。
require "vendor/autoload.php";
new ActiveCollab\Client;
用于测试文件是否正确加载。我试图使用的文件的composer.json看起来像这样。我觉得这个问题存在于此文件中,但我无法弄清楚是什么。
stuff...
"autoload": {
"psr-0": {
"ActiveCollab\\": "ActiveCollab"
}
}
...stuff
同时查看autload_namespaces.php文件,它也是如此生成的。
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'ActiveCollab' => array($vendorDir . '/activecollab/activecollab-sdk/ActiveCollab'),
);
我在自己的一些作曲家程序包中使用了psr-0,除了命名空间中的驼峰情况外,一切看起来都是正确的,但我不认为这在psr-0的php提议中是不允许的。 / p>
感谢您的帮助,这让我发疯了。
答案 0 :(得分:1)
问题是:您不能简单地添加带有随机自动加载配置的composer.json
文件并希望它能够正常工作 - 它实际上必须与您正在使用的命名方案相匹配。这就是这个项目出错了,没有人测试过它。这可能意味着没有人使用这个库,并且由于缺乏兴趣,你可能不会得到创作者的支持。
但是,让我们看看他们如何对my pull request做出反应,让事情重新恢复正常。
答案 1 :(得分:0)
作曲家配置看起来很好:是不是你从类名中省略了前导\?
new \ActiveCollab\Client;
如果你的代码在另一个名称空间内,你将需要它,因为它将相对于当前名称空间加载它。
编辑:我刚刚检查了该库,即使使用上述修复程序,自动加载器也不能正常工作。由于库的composer.json
文件指定了PSR0自动加载器,但使用“.class.php”扩展(不兼容PSR0),自动装带器也可能会损坏。库中包含autoload.php文件,因此,如果您只是require
该文件,则应该可以使用这些类:
require 'vendor/activecollab/activecollab-sdk/ActiveCollab/autoload.php';
完成此操作后,我可以使用该课程。