首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend Framework 2库路径

Zend Framework 2库路径
EN

Stack Overflow用户
提问于 2011-11-06 18:13:30
回答 1查看 4.5K关注 0票数 3

尝试尝试ZF2,但我遇到了我的第一个问题。假设在一个模块上我想使用Shanty_Mongo (一个连接到MongoDb的外部库)

因此,我复制了库中的整个Shanty目录,并创建了一个新的Model类:

代码语言:javascript
复制
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中添加一些东西来指向额外的库吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-13 17:23:22

Shanty_Mongo是一个“旧的”下划线分隔的库,不使用名称空间。在ZF2中,样式是相同的PSR-0标准,但带有名称空间(因此Shanty_Mongo将是Shanty\Mongo)。但是,例如,您可以使用类映射很好地加载这些旧样式。然后,您可以在ZF2项目中使用下划线分隔的类。

我建议你为这个库创建一个模块,并将该模块放在./vendor下(用于“提供第三方功能的模块”)。在此模块中,您可以创建以下目录结构(我假设模块的名称为ShantyMongo):

代码语言:javascript
复制
./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可以是这样简单的东西:

代码语言:javascript
复制
<?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类似的东西:

代码语言:javascript
复制
<?php
spl_autoload_register(include __DIR__ . '/autoload_function.php');

要让ZF2应用程序知道您有这个模块,需要用ShantyMongo\Module类填充module.php。这样的代码应该就足够了:

代码语言:javascript
复制
<?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中设置了这个第三方库的自动加载器。然后,您可以使用模型,如下所示:

代码语言:javascript
复制
<?php

namespace Dummy\Model;

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

因为ShantyMongo不使用名称空间,所以不再使用use语句。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8026375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档