Composer php 让自动加载为存储库包工作

Composer php 让自动加载为存储库包工作,composer-php,Composer Php,我尝试了classmap、psr-0、psr-4的所有功能,但在使用git存储库中的包时,似乎无法自动加载 { "repositories": [ { "type": "package", "package": { "name": "michaeljs1990/bitcoin-php-api", "version": "dev-master", "source": { "url": "http

我尝试了classmap、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目录中使用名称空间Bitcoin定义的,但总是失败

<?php

include 'vendor/autoload.php';

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

?>

您所指的存储库已经有一个
composer.json
文件,因此您在
存储库中的条目不需要使用
type:package
,只需使用以下内容即可:

{
    "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可以在
src/Bitcoin
中找到带有
Bitcoin
的类,这对于此类是错误的:
src/Bitcoin/
+
Bitcoin/Bitcoin.php
不存在

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


我的建议优化将此目录限制为以
比特币开始的类,这是可行的,但我必须创建一个新目录,然后运行composer安装。仅更改composer.json中的自动加载后运行composer update似乎不起作用。是否有“重新安装所有内容”命令?Composer倾向于坚持使用已安装的内容。要完全重新启动,请删除
vendor
文件夹和
composer.lock
文件,然后运行
composer update
composer install
(如果锁文件不存在,则与更新相同)。