gpt4 book ai didi

zend-framework - 使用 Doctrine ODM 将 Zend Framework 1.11 与 MongoDB 集成

转载 作者:可可西里 更新时间:2023-11-01 09:10:27 25 4
gpt4 key购买 nike

有人知道使用 Doctrine 2 beta ODM 将 zend 框架与 Mongo 集成的方法吗?我看过关于与 MySQL 的 Doctrine 2 ORM 集成的 zendcast 视频,但 Bisna 从未更新以支持 Mongo。

我想我可以尝试破解 Bisna 使其正常工作,但我想知道是否其他人已经找到了使其正常工作的方法。

最佳答案

写一个 Zend Bootstrap Resource 很容易.

这是我使用的一个:

<?php

namespace Cob\Application\Resource;

use Doctrine\Common\Annotations\AnnotationReader,
Doctrine\ODM\MongoDB\DocumentManager,
Doctrine\MongoDB\Connection,
Doctrine\ODM\MongoDB\Configuration,
Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver,
Doctrine\Common\EventManager;

/**
* Creates a MongoDB connection and DocumentManager instance
*
* @author Andrew Cobby <cobby@cobbweb.me>
*/
class Mongo extends \Zend_Application_Resource_ResourceAbstract
{

/**
* @return \Doctrine\ODM\MongoDB\DocumentManager
*/
public function init()
{
$options = $this->getOptions() + array(
'defaultDB' => 'my_database',
'proxyDir' => APPLICATION_PATH . '/domain/Proxies',
'proxyNamespace' => 'Application\Proxies',
'hydratorDir' => APPLICATION_PATH . '/domain/Hydrators',
'hydratorNamespace' => 'Application\Hydrators'
);

$config = new Configuration();
$config->setProxyDir($options['proxyDir']);
$config->setProxyNamespace($options['proxyNamespace']);
$config->setHydratorDir($options['hydratorDir']);
$config->setHydratorNamespace($options['hydratorNamespace']);
$config->setDefaultDB($options['defaultDB']);

$reader = new AnnotationReader();
$reader->setDefaultAnnotationNamespace('Doctrine\ODM\MongoDB\Mapping\\');
$config->setMetadataDriverImpl(new AnnotationDriver($reader, $this->getDocumentPaths()));

$evm = new EventManager();
$evm->addEventSubscriber(new SlugSubscriber());

return DocumentManager::create(new Connection(), $config, $evm);
}

public function getDocumentPaths()
{
$paths = array();
foreach(new \DirectoryIterator(APPLICATION_PATH . '/modules') as $module){
$path = $module->getPathname() . '/src/Domain/Document';

if((!$module->isDir() || $module->isDot()) || !is_dir($path)){
continue;
}

$paths[] = $path;
}

if(!count($paths)){
throw new \Exception("No document paths found");
}

return $paths;
}

}

尽管您必须更新 getDocumentPaths() 方法以适合您的应用程序目录结构。

关于zend-framework - 使用 Doctrine ODM 将 Zend Framework 1.11 与 MongoDB 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5461167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com