PSR-0自动加载问题

时间:2014-06-11 21:09:46

标签: php composer-php autoload psr-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

Folder structure of package

同时查看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>

感谢您的帮助,这让我发疯了。

2 个答案:

答案 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';

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

相关问题