库Shanty_Mongo
是一个“旧”下划线分隔的库,不使用名称空间。在ZF2中,风格与PSR-0标准相同,但具有命名空间(因此Shanty_Mongo
将为Shanty\Mongo
)。但是,例如,您可以使用类图加载这些旧式样。然后你可以在你的ZF2项目中使用下划线分隔的类。
我建议你为这个库创建一个模块,并把该模块放在./vendor
(“提供第三方功能的模块”)。在这个模块中,可以创建以下目录结构(我假设模块的名称是ShantyMongo):
./vendor/ShantyMongo/
library/
Module.php
autoload_classmap.php
autoload_function.php
autoload_register.php
图书馆是一个子模块的ShantyMongo git仓库。文件autoload_classmap.php
是由ZF2存储库的bin
目录内的php脚本classmap_generator.php
创建的类映射。然后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这个第三方库。然后,您可以如下使用您的模型:
<?php
namespace Dummy\Model;
class Dummy extends Shanty_Mongo_Document {
public function setConnections ($connections) {
Shanty_Mongo::addConnections($connections);
}
}
因为ShantyMongo不使用名称空间,所以您不再使用该语句。
尝试'使用Shanty \ Mongo \ Document作为文档',然后'class Dummy extends Document'。我对这些命名空间并不太坚定,但是如果我理解正确,它应该像那样工作 – Sam
不幸的是,它不起作用。实际上,Shanty_Mongo遵循Zend为它的库强制执行的目录命名转换,但我想它不起作用,因为它不支持命名空间。我试图弄清楚如何使它工作(http://packages.zendframework.com/docs/latest/manual/en/zend.loader.html#zend.loader.load) – mobius