尝试尝试ZF2,但我遇到了我的第一个问题。假设在一个模块上我想使用Shanty_Mongo (一个连接到MongoDb的外部库)
因此,我复制了库中的整个Shanty目录,并创建了一个新的Model类:
namespace Dummy\Model;
use Shanty\Mongo\Document;
class Dummy extends Shanty_Mongo_Document {
public function setConnections( $connections ) {
Shanty_Mongo::addConnections($connections);
}
}(如果我理解得很好,setConnections()将由DI使用)
这似乎无法找到Shanty_Mongo_Document。我应该在application.config.php中添加一些东西来指向额外的库吗?
发布于 2011-12-13 17:23:22
库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该库是Shanty-Mongo git存储库的一个子模块。文件autoload_classmap.php是由php脚本classmap_generator.php在ZF2存储库的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应用程序知道您有这个模块,需要用ShantyMongo\Module类填充module.php。这样的代码应该就足够了:
<?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',
)
);
}
}如果你在application.config.php中添加"ShantyMongo“到你的模块数组中,你现在已经在ZF2中设置了这个第三方库的自动加载器。然后,您可以使用模型,如下所示:
<?php
namespace Dummy\Model;
class Dummy extends Shanty_Mongo_Document {
public function setConnections ($connections) {
Shanty_Mongo::addConnections($connections);
}
}因为ShantyMongo不使用名称空间,所以不再使用use语句。
https://stackoverflow.com/questions/8026375
复制相似问题