Zend Framework 2库路径

时间:2011-11-06 10:13:30

标签: php zend-framework zend-framework2

试图在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);
  }
}

(如果我理解的话,DI将使用setConnections())

这似乎无法找到Shanty_Mongo_Document。我应该在application.config.php中添加一些内容来指向额外的库吗?

1 个答案:

答案 0 :(得分:4)

图书馆Shanty_Mongo是一个" old"在不使用命名空间的情况下强调分隔库。在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是由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应用程序知道您有此模块,您需要使用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',
            )
        );
    }
}

如果你添加&#34; ShantyMongo&#34;在application.config.php中的模块数组中,您现在已经为ZF2中的第三方库设置了自动加载器。然后,您可以按如下方式使用您的模型:

<?php

namespace Dummy\Model;

class Dummy extends Shanty_Mongo_Document {
  public function setConnections ($connections) {
    Shanty_Mongo::addConnections($connections);
  }
}

由于ShantyMongo不使用名称空间,因此您不再使用该语句。