以前我只使用与Zend Framework 2一起使用命名空间的第三方库。现在我需要使用不使用命名空间的a library,而我似乎无法使其工作。我通过Composer安装它,它安装在vendor
目录中。我试着按如下方式使用它:
$obj = new \SEOstats();
结果是致命错误,表明找不到该类。我试图手动配置StandardAutoloader
,但到目前为止没有运气。我认为通过Composer安装时会自动为我完成自动加载,但我想不是没有命名空间的情况?我没有看到Composer生成的自动加载文件中对库的任何引用。我想我必须手动完成 - 但是怎么做?
提前致谢。
答案 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#files和http://getcomposer.org/doc/04-schema.md#classmap
如果您在创建对象时位于命名空间下,则必须使用“\”(根命名空间),否则您将使用当前命名空间下的Library01类(如果您有一个,如果您没有你会得到一个错误。)