使自动加载适用于存储库包

时间:2014-08-03 16:04:25

标签: composer-php

我已经尝试了所有类别的地图,psr-0,psr-4,但是当使用git存储库中的包时,似乎无法使用自动加载工作

{
  "repositories": [
    {
      "type": "package",
      "package": {
        "name": "michaeljs1990/bitcoin-php-api",
        "version": "dev-master",
        "source": {
          "url": "https://github.com/michaeljs1990/Bitcoin-PHP-API",
          "type": "git",
          "reference": "master"
        },
        "autoload": {
          "psr-0": {"Bitcoin": "src/Bitcoin"}
        }
      }
    }
  ],
  "require": {
    "michaeljs1990/bitcoin-php-api": "dev-master"
  }
}

使用命名空间比特币在src / Bitcoin目录中定义类,但这总是失败

<?php

include 'vendor/autoload.php';

$test = new \Bitcoin\Bitcoin($null);

?>

1 个答案:

答案 0 :(得分:1)

您所引用的存储库已有composer.json个文件,因此您无需使用type:package进入repositories,只需使用以下内容即可:

{
    "type": "vcs",
    "url": "https://github.com/michaeljs1990/Bitcoin-PHP-API"
}

这将直接从该存储库使用Composer数据,并且它将起作用,因为您声明自动加载错误:

"autoload": {
    "psr-0": {"Bitcoin": "src/Bitcoin"}
},

原始的:

"autoload": {
    "psr-0": { "": "src/" }
},

为获得最佳性能,应使用此方法:

"autoload": {
    "psr-0": { "Bitcoin": "src/" }
},

有什么区别? PSR-0需要它应该尝试搜索的前缀,以及从中开始搜索完整类名转换为路径名的目录。将在相对路径Bitcoin\Bitcoin中指定名为Bitcoin/Bitcoin.php的类。

您的自动加载告诉Composer,在Bitcoin中可以找到src/Bitcoin的类,这对于此类错误:src/Bitcoin/ + Bitcoin/Bitcoin.php不存在。

原始自动加载告诉Composer在src/中可能找到任何类,这对于大多数人来说也是错误的,但对于比特币类来说却是如此。即使这样可行,它也会尝试在不同目录中搜索之前在该目录中搜索大量其他类,从而浪费磁盘I / O.

我建议的最佳值将此目录限制为以Bitcoin开头的类。