Composer不会更新自动加载名称空间

时间:2014-06-21 20:43:55

标签: php namespaces composer-php

Composer不更新 autoload_namespaces.php 文件,尽管下载包正常。无法理解我在哪里犯了错误。 如果我从packagist加载一些东西,名称空间文件成功更新。

项目结构

Structure

Main Composer.json

{
    "repositories":[
        {
            "type": "package",
            "package": {
                "name": "test/framework",
                "version": "1.0.0.1",
                "dist": {
                    "url": "http://localhost/repo/1.zip",
                    "type": "zip"
                }
            }
        }
    ],

    "require": {
        "test/framework": "*"
    }
}

包composer.json

{
    "name": "test/framework",
    "type": "library",
    "require": {
        "php": ">=5.2.4"
    },
    "autoload": {
        "psr-0" : {
            "Test" : "lib/"
        }
    }
}

autoload_namespaces.php

<?php

// autoload_namespaces.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
);

2 个答案:

答案 0 :(得分:2)

您正在通过zip下载存储库中定义的包。

https://getcomposer.org/doc/05-repositories.md#package-2

在这种情况下,我觉得你应该在同一个地方定义包定义。有关包含自动加载定义的示例,请参阅上面的链接。

{
    "repositories":[
        {
            "type": "package",
            "package": {
                "name": "test/framework",
                "version": "1.0.0.1",
                "dist": {
                    "url": "http://localhost/repo/1.zip",
                    "type": "zip"
                },
                "autoload": {
                    "psr-4" : {
                        "Test\\": "lib"
                    }
                }
            }
        }
    ],

    "require": {
        "test/framework": "*"
    }
}

您还可以尝试一些变体,请参阅http://harikt.com/blog/2014/05/29/hidden-gems-of-composer/

上的帖子

PS:psr-4是自动加载psr-0结构化类的推荐方法。见https://getcomposer.org/doc/04-schema.md#autoload

答案 1 :(得分:2)

只是为了添加Hari KT所说的内容,请确保在更新composer.json文件后删除vendor目录,因为composer使用./vendor/composer目录中的installed.json文件生成自动加载php文件。

我已经正确设置了composer.json,但没有删除现有的供应商目录,所以我认为Hari K T提供的答案没有用。