【问题标题】:Class 'MongoId' not found (Zend Framework with MongoDB Doctrine)未找到“MongoId”类(Zend Framework with MongoDB Doctrine)
【发布时间】:2014-02-22 11:01:58
【问题描述】:

我目前正在尝试将 MongoDB 与 ZendFramework 中的 Doctrine 集成。我做了很多教程(在 StackOverflow 或其他任何地方),但没有任何效果。

我按照教程一步一步操作: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 的源代码,所以错误肯定在其他地方。 这是我拥有的文件。 (Admin 是模块的名称)

config/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',
        ),

    ),

);

config/autoload/module.doctrine-mongo-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');
     }
}

模块/Admin/config/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 数据库,并列出其中的所有文档。

谢谢!

吉尔

【问题讨论】:

  • 你确定PHP的Mongo驱动已经安装了吗?
  • 是的,mongo驱动安装好了!
  • 您是否使用use 语句对类进行命名空间或在类前加上反斜杠;即new \MongoId($id)?
  • IDType.php 中已经有“namespace Doctrine\ODM\MongoDB\Types”。我还需要写一个“使用”吗?错误真的在 IdType 中吗?因为它是源代码,所以它应该可以工作(互联网上没有这样的错误)。会很奇怪。
  • 对不起@PhillipWhelan,看来你第一次是对的。我的服务器上安装了 MongoDB 驱动程序,并且 php.ini 文件中有“extention=mongo.so”,但是当我 phpinfo() 时,没有出现 Mongo 驱动程序。这肯定是错误。

标签: php mongodb doctrine zend-framework2 mongodb-php


【解决方案1】:

如果您使用较新的 mongodb 扩展而不是 PHP 的 mongo 扩展,则需要使用 MongoDB\BSON\ObjectID,详细信息请参见 php.net 页面

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多