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

And*_*708 4 php autoloader zend-framework2 composer-php

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

$obj = new \SEOstats();

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

提前致谢.

Lor*_*ara 8

您可以使用文件和类映射键.

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

{
    "require": {
        "vendor-example/non-psr0-libraries": "dev-master",
    },
    "autoload":{
        "files": ["vendor/vendor-example/non-psr0-libraries/Library01.php"]
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用文件密钥,您可以使用

$lib = new \Library01();
Run Code Online (Sandbox Code Playgroud)

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

{
    "require": {
        "vendor-example/non-psr0-libraries": "dev-master",
    },
    "autoload":{
        "classmap": ["vendor/vendor-example/non-psr0-libraries/"]
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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