以前我只使用第三方库,这些库将命名空间与 Zend Framework 2 一起使用。现在我需要使用 a library不使用命名空间,我似乎无法让它工作。我通过 Composer 安装它,并且它安装在 vendor
目录中。我正在尝试按如下方式使用它:
$obj = new\SEOstats();
结果是一个 fatal error ,表示找不到该类。我曾尝试手动配置 StandardAutoloader
,但到目前为止还没有成功。我以为通过 Composer 安装时会自动为我完成自动加载,但我想如果没有 namespace ,情况并非如此?我没有在 Composer 生成的自动加载文件中看到任何对库的引用。我想我必须手动完成 - 但怎么做?
提前致谢。
最佳答案
您可以使用 files 和 classmap 键。
举个例子,考虑这个 composer.json:
{
"require": {
"vendor-example/non-psr0-libraries": "dev-master",
},
"autoload":{
"files": ["vendor/vendor-example/non-psr0-libraries/Library01.php"]
}
}
使用你可以使用的文件 key
$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类(有则无你会得到一个错误)。
关于php - ZF2 : autoloading libraries without namespaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16366663/