Im 'в настоящее время пытается интегрировать MongoDB с Doctrine в ZendFramework. Я сделал много учебников (на 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 – это имя модуля)
конфиг / 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'); } }
Модуль / Admin / конфигурация / 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 и просто составление списка всего документа в нем.
Спасибо !
жилль
Если вы используете более новое расширение mongodb, а не расширение mongo для PHP, вам нужно будет использовать MongoDB \ BSON \ ObjectID, как описано на странице php.net