繁体   English   中英

PSR-0自动加载的问题

[英]Issue with PSR-0 autoloading

我正在尝试将此组合程序包与正在使用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'),
);

我已经在自己的一些composer程序包中使用了psr-0,并且除命名空间中的驼峰式情况外,其他一切看起来都是正确的,但我不认为psr-0的php提案中不允许这样做。

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

关键是:您不能简单地添加具有随机自动加载配置的composer.json文件,并希望它能工作-实际上必须匹配您使用的命名方案。 这就是该项目出错的原因,并且没有人对其进行测试。 这可能意味着没有人使用此库,并且由于缺乏兴趣,您可能无法期望创建者提供支持。

但是,让我们看看他们如何响应我的请求 ,使事情重新恢复正常工作。

作曲家的配置看起来不错:是否只是在类名中省略了开头的\\的情况?

new \ActiveCollab\Client;

如果您的代码位于另一个名称空间中,则将需要它,因为它将相对于当前名称空间进行加载。

编辑:我刚刚签出了该库,即使进行了上述修复,自动装带器也无法正常工作。 由于库的composer.json文件指定了PSR0自动加载器,但使用了“ .class.php”扩展名(与PSR0不兼容),因此自动加载器也可能损坏。 该库包含一个autoload.php文件,因此,如果仅require该文件,则应该可以使用这些类:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM