Composer自动加载psr-4而不是将名称空间添加到autoload_psr4.php

时间:2014-08-01 09:14:38

标签: php composer-php autoload psr-4

我在项目中使用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,composer dump如下所示: 没有“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'),
);

任何帮助?

1 个答案:

答案 0 :(得分:11)

This answer也适用于此。

因为您提供的是"类型:包"输入"存储库",您将禁用包中的composer.json文件。

并且包定义中没有定义自动加载,因此包根本不会自动加载。

解决方案:不要使用" type:package"您拥有的存储库的条目,其中包含composer.json文件。