0

我正在尝试将此作曲家包与我正在处理的一个新项目一起使用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 提案中是不允许的。

感谢您提供的任何帮助,这让我发疯了。

4

2 回答 2

1

问题是:您不能简单地添加composer.json具有随机自动加载配置的文件并希望它有效 - 它实际上必须与您使用的命名方案相匹配。这就是这个项目出错的地方,没有人测试过。这可能意味着没有人使用这个库,并且由于缺乏兴趣,您可以期望创建者不会提供支持。

但是让我们看看他们如何对我的拉取请求做出反应,以使事情重新开始工作。

于 2014-06-11T22:35:53.640 回答
0

作曲家配置看起来不错:只是您从类名中省略了前导 \ 的情况吗?

new \ActiveCollab\Client;

如果您的代码在另一个命名空间内,您将需要它,因为它将相对于当前命名空间加载它。

编辑:我刚刚检查了那个库,即使有上述修复,自动加载器也不能很好地工作。composer.json由于库文件指定了 PSR0 自动加载器,但使用“.class.php”扩展名(不兼容 PSR0),自动加载器也可能损坏。库中包含一个 autoload.php 文件,因此如果您只是require该文件,您应该能够使用这些类:

require 'vendor/activecollab/activecollab-sdk/ActiveCollab/autoload.php';

完成此操作后,我就可以使用该课程了。

于 2014-06-11T21:16:20.443 回答