6

我在一个项目中使用 github 中的自定义存储库,其中包含我的一组工具。

该项目在 /vendor 目录中正确导入包,但我不能使用任何类,因为它没有自动加载包的内容。

我的包 composer.json 文件如下所示:

{
"name": "mynamespace/toolbox",
"description": "Asdfoobar.",
"keywords": ["mynamespace", "toolbox"],
"license": "MIT",
"require": {
    "php": ">=5.4"          
},
"require-dev": {
    "codeception/codeception": "2.0.2",
    "codeception/specify": "0.3.6",
    "codeception/verify": "0.2.7",
    "mockery/mockery": "0.9.1"
},
"autoload": {
    "psr-4": {
        "Mynamespace\\": "src/Mynamespace",
        "Mocks\\": "tests/Mocks"
    }
},
"scripts": {
    "post-install-cmd": [

    ],
    "post-update-cmd": [
        "php vendor/bin/codecept run"
    ]
},
"config": {
    "preferred-install": "dist"
},
"minimum-stability": "stable"

}

相反,在项目内部,composer.json 文件如下所示:

    "require": {
       [...stuff...]
       "Mygitrepo/toolbox": "dev-master" 
    },
    "repositories": [        
    {
        "type": "package",
        "package": {
            "name": "Mygitrepo/toolbox",
            "version": "master",
            "source": {
                "url": "https://github.com/Mygitrepo/toolbox.git",
                "type": "git",
                "reference": "master"
            }
        }
    }
]

完成作曲家更新后的最终 autoload_psr4.php,作曲家转储如下所示:没有“Mynamespace”的痕迹

return array(
  'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
  'Ivory\\LuceneSearchBundle\\' => array($vendorDir . '/egeloen/lucene-search-bundle'),
  'Facebook\\' => array($vendorDir . '/facebook/php-sdk-v4/src/Facebook'),
);

有什么帮助吗?

4

1 回答 1

11

这个答案也适用于此。

因为您在“存储库”中提供了“类型:包”条目,所以您正在禁用composer.json包中的文件。

并且包定义中没有定义自动加载,所以包根本没有自动加载。

解决方案:不要将“type:package”条目用于您拥有且composer.json内部有文件的存储库。

于 2014-08-01T19:24:18.817 回答