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

Posted

技术标签:

【中文标题】ZF2:自动加载没有命名空间的库【英文标题】:ZF2: autoloading libraries without namespaces 【发布时间】:2013-04-28 07:33:09 【问题描述】:

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

$obj = new \SEOstats();

结果是一个致命错误,表明无法找到该类。我曾尝试手动配置StandardAutoloader,但到目前为止没有任何运气。我认为通过 Composer 安装时会自动为我完成自动加载,但我想如果没有命名空间就不是这样吗?我没有在 Composer 生成的自动加载文件中看到对库的任何引用。我想我必须手动操作 - 但如何操作?

提前致谢。

【问题讨论】:

【参考方案1】:

您可以使用 filesclassmap 键。

以 composer.json 为例:


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

使用 files 键,您可以使用

$lib = new \Library01();

当您需要加载多个包含类的文件时,请使用类映射键。 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#files和http://getcomposer.org/doc/04-schema.md#classmap

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

【讨论】:

以上是关于ZF2:自动加载没有命名空间的库的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 5.3 中使用命名空间自动加载?

PHP中的use命名空间引入类文件自动加载类的理解

使用单个文件中的类作曲家自动加载

作曲家自动加载命名空间错误

使用 Symfony 1.4 的自动加载器加载命名空间类?

使用命名空间和自动加载器找不到类