2014-02-22 68 views
3

Im'正在嘗試在ZendFramework中將MongoDB與Doctrine集成在一起。我做了很多教程(在StackOverflow或其他地方),但沒有什麼是真正的工作。找不到'MongoId'類(使用MongoDB準則的Zend框架)

我按照一步一步的教程:http://www.bigwisu.com/2012/10/03/zend-framework-2-doctrine-odm,我得到了一個我不明白的錯誤。

Fatal error: Class 'MongoId' not found in /home/prooxi/www/zframework/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Types/IdType.php on line 38 

IdType.php是mongoDB的源代碼,所以錯誤必須在別的地方。 這裏是我有的文件。 (管理員是模塊的名稱)

配置/ application.config.php

<?php 
return array(
    'modules' => array(
       'Application', 
       'DoctrineModule', 
       'DoctrineMongoODMModule', 
       'Udmin', 
       'Listing', 
       'Admin', 
    ), 

    'module_listener_options' => array(
     'module_paths' => array(
      './module', 
      './vendor', 
     ), 

     'config_glob_paths' => array(
      'config/autoload/{,*.}{global,local}.php', 
     ), 

    ), 

); 

配置/自動加載/ module.doctrine-蒙戈-odm.local.php

<?php 
return array(
     'doctrine' => array(

       'connection' => array(
           'odm_default' => array(
              'server'   => 'MYDBADRESS', 
              'port'    => '27017', 
              /* 'connectionString' => null, */ 
              /* 'user'    => null, */ 
              /* 'password'   => null, */ 
              'dbname'   => 'px_boutique_test27', 
              'options'   => array() 
             ), 
           ), 

       'configuration' => array(
           'odm_default' => array(
             'metadata_cache'  => 'array', 
             'driver'    => 'odm_default', 
             'generate_proxies' => true, 
             'proxy_dir'   => 'data/DoctrineMongoODMModule/Proxy', 
             /* 'proxy_dir'   => __DIR__ . '/module/Admin/src/Admin/Model/Proxy', */ 
             /* 'proxy_dir'   => __DIR__ . '/module/Udmin/src/Udmin/Model/Proxy', */ 
             'proxy_namespace' => 'DoctrineMongoODMModule\Proxy', 
             /* 'proxy_namespace' => 'Udmin\Model\Proxy', */ 
             'generate_hydrators' => true, 
             'hydrator_dir'  => 'data/DoctrineMongoODMModule/Hydrator', 
             /* 'hydrator_dir'  => __DIR__ . '/module/Udmin/src/Udmin/Model/Hydrator', */ 
             'hydrator_namespace' => 'DoctrineMongoODMModule\Hydrator', 
             /* 'hydrator_namespace' => 'Udmin\Model\Hydrator', */ 
             'default_db'   => 'test27', 
             'filters'   => array(), // array('filterName' => 'BSON\Filter\Class'), 
             /* 'logger'    => null // 'DoctrineMongoODMModule\Logging\DebugStack' */ 
             ) 
          ), 

       'driver' => array(
          'odm_default' => array(
             'drivers' => array(
               'Admin\Document' => 'aplikasi' 
               ) 
            ), 
          'aplikasi' => array(
             'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver', 
             'cache' => 'array', 
             'paths' => array(
              'module/Admin/src/Admin/Document' 
              ) 
             ) 
          ), 
       'documentmanager' => array(
           'odm_default' => array(
              'connection' => 'odm_default', 
              'configuration' => 'odm_default', 
              'eventmanager' => 'odm_default' 
              ) 
           ), 
       'eventmanager' => array(
          'odm_default' => array(
             'subscribers' => array() 
             ) 
          ),    

       ), 
     ); 

模塊/Admin/Src/Admin/Controller/AdminController.php

<?php 
namespace Admin\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 
use Mongo; 
use Zend\Session\SaveHandler\MongoDB; 
use Zend\Session\SaveHandler\MongoDBOptions; 
use Zend\Session\SessionManager; 
use Admin\Document\Boutique; 

class AdminController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     $dm = $this->getServiceLocator()->get('doctrine.documentmanager.odm_default'); 
     $b = new Boutique(); 

     /* $dm->getRepository('Admin\Document\Boutique')->findAll(); */ 
     $dm->find('Admin\Document\Boutique', '52e6c677362dca7fcd40ab09'); 
    } 
} 

模塊/管理/配置/ module.config.php

<?php 
return array(
     'controllers' => array(
        'invokables' => array(
           'Admin\Controller\Admin' => 'Admin\Controller\AdminController', 
          ), 
        ), 

     'router' => array(
        'routes' => array(
         'admin' => array(
            'type' => 'segment', 
            'options' => array(
              'route' => '/admin[/][:action][/:id]', 
              'constraints' => array(
                 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
                 'id'  => '[0-9]+', 
                 ), 
              'defaults' => array(
                'controller' => 'Admin\Controller\Admin', 
                'action'  => 'index', 
                ), 
              ), 
           ), 
         ), 
        ), 

     'view_manager' => array(
        'template_path_stack' => array(
            'admin' => __DIR__ . '/../view', 
            ), 
        ), 

     ); 

該模塊的目的是連接到現有的MongoDB數據庫,並只是列出其中的所有文檔。

謝謝!

吉爾斯

+1

是否已進行了確認蒙戈司機爲PHP已安裝? –

+0

Y,mongo驅動程序已安裝! – Roux

+1

您是使用'use'語句爲類指定空間還是使用反斜槓爲類加上前綴; I.E'new \ MongoId($ id)'? – AlexP

回答

4

如果您使用的是較新的MongoDB的延伸,而不是蒙戈擴展庫,你將需要使用MongoDB的\ BSON \對象ID的php.net頁上詳述