ZF2:没有命名空间的自动加载库

时间:2013-05-03 20:01:03

标签: php zend-framework2 composer-php autoloader

以前我只使用与Zend Framework 2一起使用命名空间的第三方库。现在我需要使用不使用命名空间的a library,而我似乎无法使其工作。我通过Composer安装它,它安装在vendor目录中。我试着按如下方式使用它:

$obj = new \SEOstats();

结果是致命错误,表明找不到该类。我试图手动配置StandardAutoloader,但到目前为止没有运气。我认为通过Composer安装时会自动为我完成自动加载,但我想不是没有命名空间的情况?我没有看到Composer生成的自动加载文件中对库的任何引用。我想我必须手动完成 - 但是怎么做?

提前致谢。

1 个答案:

答案 0 :(得分:8)

您可以使用文件 classmap 键。

作为一个例子,考虑一下这个composer.json:

{
    "require": {
        "vendor-example/non-psr0-libraries": "dev-master",
    },
    "autoload":{
        "files": ["vendor/vendor-example/non-psr0-libraries/Library01.php"]
    }
}

然后使用文件键,您可以使用

$lib = new \Library01();

当您需要加载包含类的多个文件时,请使用classmap键。 composer.json将是:

{
    "require": {
        "vendor-example/non-psr0-libraries": "dev-master",
    },
    "autoload":{
        "classmap": ["vendor/vendor-example/non-psr0-libraries/"]
    }
}

Composer将扫描指定目录中的 .php .inc 文件,为每个文件/类配置自动加载器。

有关详情,请查看http://getcomposer.org/doc/04-schema.md#fileshttp://getcomposer.org/doc/04-schema.md#classmap

如果您在创建对象时位于命名空间下,则必须使用“\”(根命名空间),否则您将使用当前命名空间下的Library01类(如果您有一个,如果您没有你会得到一个错误。)