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】:您可以使用 files 和 classmap 键。
以 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:自动加载没有命名空间的库的主要内容,如果未能解决你的问题,请参考以下文章