【问题标题】:Issue with PSR-0 autoloadingPSR-0 自动加载问题
【发布时间】:2014-08-02 01:59:40
【问题描述】:

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

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

【问题讨论】:

  • 我不确定这一点,但根据 psr0,类的文件名不必是 ClassName.php。那么使用 ClassName.class.php 可能会违反这个?

标签: php composer-php autoload psr-0


【解决方案1】:

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

但让我们看看他们对my pull request 的反应如何让一切恢复正常。

【讨论】:

  • 太棒了,非常感谢。我试图做你所做的,但我对 psr-0 标准有一点误解,查看你的代码已经为我清除了。
  • 维护者对这个问题反应很快,并用标记的版本 1.0.3 修复了这个问题。您应该简单地更新并完成。
  • 对于其他正在查看此内容的人。除了 Sven 所做的更改之外,composer.json 文件中的路径也错误,它被设置为“ActiveCollab”:“ActiveCollab”,我认为映射时不满足命名约定,因为您将不再包含包名称在使用声明中。而是将其切换为“ActiveCollab”:“/”,一切都按预期工作。再次感谢斯文的所有帮助。
  • 你说得对,我应该将自动加载方案改为 PSR-4。实际上,我将其他拉取请求与使用的类映射方案合并,然后开发人员决定采用重命名路线。为没有测试它而感到羞耻 - 如果不修复它,即使 5 分钟的修复也很糟糕。
  • 是的,我不确定那个开发者以前是否使用过 composer,但我很高兴他正在接受拉取请求来支持它。希望我添加的文档能帮助它不再被破坏。
【解决方案2】:

composer 配置看起来不错:是否只是您在类名中省略了前导 \ 的情况?

new \ActiveCollab\Client;

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 2014-04-16
    • 2014-03-24
    • 2015-01-08
    • 2014-02-14
    • 2014-07-25
    • 2013-11-09
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多