php - Composer 不生成自动加载器信息 (autoload_namespaces.php)

标签 php json composer-php autoload psr-0

我无法通过 Composer 正确安装项目。我有一个自己的自定义包(库)托管在一个非公共(public)的 git repo(但集中)中,它由 composer 获取(包含 composer.json 的虚拟项目只是为了测试我的包)。

所以结构是这样的:


/test/project/composer.json
              index.php

composer.json 的内容:

{
    "name": "vendor/test",
    "description": "Test-description",
    "authors": [{
        "name": "Benjamin Carl",
        "email": "email@testdomain.com",
        "homepage": "http://www.testdomain.com",
        "role": "Developer"
    }],
    "keywords": [
        "foo",
        "bar"
    ],
    "homepage" : "http://www.testdomain.com/",
    "license" : [
        "The BSD License"
    ],
    "repositories": [{
        "type": "package",
        "package": {
            "name": "foo/bar",
            "version": "0.0.1",
            "source": {
            "url": "git@git.testdomain.local:benjamin.carl/bar.git",
                "type": "git",
            "reference": "master"
    }
        }
    }],
    "require": {
        "foo/bar": "0.0.1"   
    }
}

因此,当我在包含测试项目和上面看到的 composer.json 的文件夹中运行 composer install "php composer.phar install"- 一切似乎都很好 - 但是 - 自动加载器信息丢失了 - map “autoload_namespaces.php”(生成的文件)中的(数组)保持为空。

我假设当我用 composer 安装一个包时,这个包(在我的例子中是 foo/bar 包)包含一个 composer.json 文件——这个文件也在安装过程中执行/处理,自动加载的信息取自这个(包)composer.json 文件。我对吗?还是我做错了什么?


这是包 foo/bar 中的“composer.json”文件的内容:

{
    "name": "foo/bar",
    "description": "foo - the project for all bars out there.",
    "authors": [{
        "name": "Benjamin Carl",
        "email": "email@testdomain.com",
        "homepage": "http://www.testdomain.com",
        "role": "Developer"
    }],
    "keywords": [
    "php",
        "foo",
    "bar",
        "baz"
    ],
    "homepage": "http://testdomain.com/",
    "license": [
        "The BSD License"
    ],
    "require": {
        "php": ">=5.3.0"
    },
    "autoload": {
        "psr-0": {
        "Foo": "Framework/"
    }
    },
    "include-path": ["Framework/"],
    "support": {
        "email": "email@testdomain.com",
        "issues": "https://testdomain.com/issues",
    "wiki": "https://testdomain.com/wiki"
    },
    "repositories": [{
        "type": "vcs",
    "url": "https://git.testdomain.local/test/bar.git"
    }]
}

作为上面配置的结果,我想要这样的自动加载信息:

$data = array(
    'Foo' => $vendorDir . '/foo/bar/Framework'
);

如果我手动插入这一行“'Foo'=> ...”一切正常。但我不明白为什么 Composer 没有将此信息写入“autoload_namespaces.php”文件。

感谢您的帮助:)

最佳答案

如果您尝试通过 composer.json 的“repositories”节点安装私有(private)库/包,显然您还必须重新指定“autoload”节点。

{
  "repositories": [{
    "type": "package",
    "package": {
      "name": "foo/bar",
      "version": "0.0.1",
      "source": {
        "url": "git@git.testdomain.local:benjamin.carl/bar.git",
        "type": "git",
        "reference": "master"
      },
      "autoload": {
        "psr-0": {
        "Foo": "Framework/"
      }
    }
  }]
}

我刚刚花了几个小时弄明白了这一点。干得好, Composer !

关于php - Composer 不生成自动加载器信息 (autoload_namespaces.php),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18106599/

相关文章:

php - Laravel 5 在数据库/redis 中存储 session

PHP setcookie() 函数在 Wordpress 模板文件中不起作用

javascript - 嵌套 JSON 无法读取属性

c# - .Net 核心中 Json() 的小写属性名称

php - 尝试在 OSX 10.9 上安装 Composer

php - 无法在我的 Laravel 项目中使用分支存储库 - "Could not find a matching version of package"

php - 在 PHP 中计算 mysql 的空列数

javascript - 我正在进行 JavaScript 验证,但当我输入姓氏时它无法正常工作,它不会显示错误并提交表单

javascript - 无法使用 res.send() 使用 express with node 发送数字

laravel - 错误 :Your requirements could not be resolved to an installable set of packages.(在服务器上)