是否有任何知道使用Doctrine 2 beta ODM將zend框架與Mongo集成的方法? 我已經查看了與Doctrine 2 ORM for MySQL集成的zendcast視頻,但是Bisna從未更新過支持Mongo。使用Doctrine ODM將Zend Framework 1.11與MongoDB集成
我想我可以試着破解比斯納來讓它工作,但我想知道別人是否已經找到了一種方法來讓它工作。
是否有任何知道使用Doctrine 2 beta ODM將zend框架與Mongo集成的方法? 我已經查看了與Doctrine 2 ORM for MySQL集成的zendcast視頻,但是Bisna從未更新過支持Mongo。使用Doctrine ODM將Zend Framework 1.11與MongoDB集成
我想我可以試着破解比斯納來讓它工作,但我想知道別人是否已經找到了一種方法來讓它工作。
我寫了我自己的很簡單簡單的應用程序資源插件和容器,使用Guilherme的集成套件的靈感。
我敢肯定,這可能在捕捉選項方面更具特色,但我想我會在需要時添加它們。
這是很容易寫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 <[email protected]>
*/
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()方法,以滿足您的應用程序的目錄結構。
我不認爲ZF 1.11支持名稱空間的應用程序資源插件。順便說一句,從一個同伴Whirlpooler你好:) – Phil 2011-03-28 22:49:37
我沒有改變Zend框架中的任何東西,所以我想它支持命名空間。 Whirlpool FTW :) – Cobby 2011-03-28 22:56:29
你如何配置資源插件的路徑?它是如何被調用的? – Phil 2011-03-28 23:04:55