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