php mongodb doctrine zend-framework2 mongodb-php

php - Clase ''MongoId'' no encontrada(Zend Framework with MongoDB Doctrine)



zend-framework2 mongodb-php (1)

Actualmente estoy tratando de integrar MongoDB con Doctrine en ZendFramework. Hice un montón de tutorial (en StackOverflow o en cualquier otro lugar) pero nada funciona realmente.

Seguí paso a paso un tutorial: http://www.bigwisu.com/2012/10/03/zend-framework-2-doctrine-odm y recibí un error que no entiendo.

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 es el código fuente de mongoDB, por lo que el error debe ser en otro lugar. Aquí están los archivos que tengo. (Admin es el nombre del módulo)

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() ) ), ), );

Módulo / 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 / 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'', ), ), );

El propósito del módulo es conectarse a un databate de MongoDB existente y simplemente hacer una lista de todo el documento en él.

Gracias !

Gilles


Si está utilizando la nueva extensión mongodb en lugar de la extensión mongo para PHP, necesitará usar MongoDB / BSON / ObjectID como se detalla en la página de php.net