该库Shanty_Mongo
是一个“旧”的下划线分隔库,不使用命名空间。在 ZF2 中,样式与 PSR-0 标准相同,但带有命名空间(因此Shanty_Mongo
将是Shanty\Mongo
)。但是,您可以使用类映射很好地加载这些旧样式。然后,您可以在 ZF2 项目中使用下划线分隔的类。
我建议您为此库创建一个模块并将该模块放在下面./vendor
(对于“提供第 3 方功能的模块”)。在这个模块中,您可以创建以下目录结构(我假设模块的名称是 ShantyMongo):
./vendor/ShantyMongo/
library/
Module.php
autoload_classmap.php
autoload_function.php
autoload_register.php
该库是 Shanty-Mongo git 存储库的子模块。该文件autoload_classmap.php
是由ZF2 存储库目录中的classmap_generator.php
php脚本创建的类映射。bin
那么 autoload_function.php 可以像这样简单:
<?php
return function ($class) {
static $map;
if (!$map) {
$map = include __DIR__ . '/autoload_classmap.php';
}
if (!isset($map[$class])) {
return false;
}
return include $map[$class];
};
和 autoload_register.php 是这样的:
<?php
spl_autoload_register(include __DIR__ . '/autoload_function.php');
为了让 ZF2 应用程序知道你有这个模块,你需要在 module.php 中填充一个ShantyMongo\Module
类。这样的事情就足够了:
<?php
namespace ShantyMongo;
use Zend\Module\Consumer\AutoloaderProvider;
class Module implements AutoloaderProvider
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
)
);
}
}
如果您将“ShantyMongo”添加到您的模块数组中,application.config.php
您现在已经为 ZF2 中的这个第 3 方库设置了自动加载器。然后,您可以按如下方式使用您的模型:
<?php
namespace Dummy\Model;
class Dummy extends Shanty_Mongo_Document {
public function setConnections ($connections) {
Shanty_Mongo::addConnections($connections);
}
}
因为 ShantyMongo 不使用命名空间,所以您不再有该 use 语句。