2011-03-28 98 views
4

是否有任何知道使用Doctrine 2 beta ODM將zend框架與Mongo集成的方法? 我已經查看了與Doctrine 2 ORM for MySQL集成的zendcast視頻,但是Bisna從未更新過支持Mongo。使用Doctrine ODM將Zend Framework 1.11與MongoDB集成

我想我可以試着破解比斯納來讓它工作,但我想知道別人是否已經找到了一種方法來讓它工作。

回答

1

我寫了我自己的很簡單簡單的應用程序資源插件和容器,使用Guilherme的集成套件的靈感。

我敢肯定,這可能在捕捉選項方面更具特色,但我想我會在需要時添加它們。

https://gist.github.com/891415

7

這是很容易寫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()方法,以滿足您的應用程序的目錄結構。

+1

我不認爲ZF 1.11支持名稱空間的應用程序資源插件。順便說一句,從一個同伴Whirlpooler你好:) – Phil 2011-03-28 22:49:37

+0

我沒有改變Zend框架中的任何東西,所以我想它支持命名空間。 Whirlpool FTW :) – Cobby 2011-03-28 22:56:29

+0

你如何配置資源插件的路徑?它是如何被調用的? – Phil 2011-03-28 23:04:55

相關問題