【问题标题】:Getting autoload to work for repository package让自动加载为存储库包工作
【发布时间】:2014-08-03 16:04:24
【问题描述】:

我已经尝试了所有类映射、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);

?>

【问题讨论】:

    标签: composer-php


    【解决方案1】:

    你所引用的仓库已经有一个composer.json文件,所以你在repositories中的条目不需要使用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 带有 Bitcoin 的类可以在 src/Bitcoin 中找到,这对于此类来说是错误的:src/Bitcoin/ + Bitcoin/Bitcoin.php 不存在。

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

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

    【讨论】:

    • 这行得通,但我必须创建一个新目录然后运行 ​​composer install。仅更改 composer.json 中的自动加载后运行 composer update 似乎不起作用。是否有重新安装所有命令?
    • Composer 倾向于坚持已安装的任何内容。要完全重新启动,请删除vendor 文件夹和composer.lock 文件,然后运行composer updatecomposer install(如果锁定文件不存在,则与更新相同)。
    猜你喜欢
    • 2014-06-02
    • 1970-01-01
    • 2015-03-03
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    相关资源
    最近更新 更多