Я пытаюсь интегрировать zf2 beta3 с догмой mongo odm (https://github.com/doctrine/DoctrineMongoODMModule), но без успеха.Как интегрировать ZF2 с Doctrine Mongo ODM?
Как его установить и настроить?
Я пытаюсь интегрировать zf2 beta3 с догмой mongo odm (https://github.com/doctrine/DoctrineMongoODMModule), но без успеха.Как интегрировать ZF2 с Doctrine Mongo ODM?
Как его установить и настроить?
дам шаги, которые я сделал для интеграции ZF2 с MongoDB доктринойODM
1.Download MongoDB доктрина модуль и ODM место в каталоге производителя или клонировать из GitHub
cd /path/to/project/vendor
git clone --recursive https://github.com/doctrine/DoctrineMongoODMModule.git
2.КОПИЯ файл из/пути/к/проекту/поставщик/DoctrineMongoODMModule/конфигурации/модулю. doctrine_mongodb.config.php.dist, поместите в свой путь/в/your/project/config/autoload/и переименуйте в module.doctrine_mongodb.local.config.php
3. Измените свой модуль.doctrine_mongodb.local.config .php. Изменение дБ по умолчанию
'config' => array(
// set the default database to use (or not)
'default_db' => 'myDbName'
),
Изменить подключение PARAMS
'connection' => array(
//'server' => 'mongodb://<user>:<password>@<server>:<port>',
'server' => 'mongodb://localhost:27017',
'options' => array()
),
Изменение опции драйвера
'driver' => array(
'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',
'namespace' => 'Application\Document',
'paths' => array('module/Application/src/Application/Document'),
),
Добавить прокси-сервер и hydratros конфигурации
'mongo_config' => array(
'parameters' => array(
'opts' => array(
'auto_generate_proxies' => true,
'proxy_dir' => __DIR__ . '/../../module/Application/src/Application/Document/Proxy',
'proxy_namespace' => 'Application\Model\Proxy',
'auto_generate_hydrators' => true,
'hydrator_dir' => __DIR__ . '/../../module/Application/src/Application/Document/Hydrators',
'hydrator_namespace' => 'Application\Document\Hydrators',
'default_db' => $settings['config']['default_db'],
),
'metadataCache' => $settings['cache'],
)
),
. Создайте каталог под названием «Документ» в/path/to/project/module/Application/src/Application /, где происходит сопоставление ваших документов и внутри каталога «Документ», создайте каталоги «Прокси» и «Гидраторы».
5. Измените свой /path/to/project/config/application.config.php и добавить 'DoctrineMongoODMModule' к массиву модулей
6. Убедитесь, что у вас установлено расширение mongo php, иначе загрузите его с http://www.php.net/manual/en/mongo.installation.php#mongo.installation.windows и скопируйте его в каталог расширения php, обычно/php/ext. Добавьте строку расширения, в которой вы добавили расширение файла имени, которое вы загрузили в расширение php.ini «extension = php_mongo-x.x.x-5.x-vc9.dll».
7.Создание сопоставления документов User.php в вашем прикладном модуле каталога документов.
<?php
namespace Application\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/** @ODM\Document */
class User
{
/** @ODM\Id */
private $id;
/** @ODM\Field(type="string") */
private $name;
/**
* @return the $id
*/
public function getId() {
return $this->id;
}
/**
* @return the $name
*/
public function getName() {
return $this->name;
}
/**
* @param field_type $id
*/
public function setId($id) {
$this->id = $id;
}
/**
* @param field_type $name
*/
public function setName($name) {
$this->name = $name;
}
}
8.Persist это, например, в контроллере
<?php
namespace Application\Controller;
use Zend\Mvc\Controller\ActionController,
Zend\View\Model\ViewModel,
Application\Document\User;
class IndexController extends ActionController
{
public function indexAction()
{
$dm = $this->getLocator()->get('mongo_dm');
$user = new User();
$user->setName('Bulat S.');
$dm->persist($user);
$dm->flush();
return new ViewModel();
}
}
Я делаю то же самое. Что-то вроде этого должно работать:
Загрузите модуль и поместите его в папку поставщика.
Добавить модуль в application.config.php
Copy module.doctrine_mongodb.config.php.dist в/конфигурации/автозагрузка
Edit, что конфигурационный файл с вашими собственными настройками
Изменение имя этого файла конфигурации для module.doctrine_mongodb.local.config.php
Создать метод «setDocumentManager» в вашем контроллере, как это:
protected $documentManager;
public function setDocumentManager(DocumentManager $documentManager)
{
$this->documentManager = $documentManager;
return $this;
}
Поместите следующий в DI конфигурации вашего модуля:
'Application\Controller\[YourControllerClass]' => array(
'parameters' => array(
'documentManager' => 'mongo_dm'
)
),
Создание классов документов в соответствии с документацией Doctrine 2, и разъяснение в этом вопросе и ответ: Annotations Namespace not loaded DoctrineMongoODMModule for Zend Framework 2
Наконец, используйте дм как это:
public function indexAction()
{
$dm = $this->documentManager;
$user = new User();
$user->set('name', 'testname');
$user->set('firstname', 'testfirstname');
$dm->persist($user);
$dm->flush();
return new ViewModel();
}
Примечание 'module.doctrine_mongodb.config.local.php' должен быть' module.doctrine_mongodb .local.config.php' –
Привет, Это очень помогло мне, спасибо. Теперь я работаю. Конфигурация немного сложная, я опубликую здесь полный ответ, чтобы настроить ее, чтобы помочь новичкам. – dextervip
Теперь конфигурация по умолчанию изменился, могли бы вы показать обновленный метод, чтобы получить эту работу в ZF2?
<?php
return array(
'doctrine' => array(
'connection' => array(
'odm_default' => array(
'server' => 'localhost',
'port' => '27017',
'user' => null,
'password' => null,
'dbname' => 'user',
'options' => array()
),
),
'configuration' => array(
'odm_default' => array(
'metadata_cache' => 'array',
'driver' => 'odm_default',
'generate_proxies' => true,
'proxy_dir' => 'data/DoctrineMongoODMModule/Proxy',
'proxy_namespace' => 'DoctrineMongoODMModule\Proxy',
'generate_hydrators' => true,
'hydrator_dir' => 'data/DoctrineMongoODMModule/Hydrator',
'hydrator_namespace' => 'DoctrineMongoODMModule\Hydrator',
'default_db' => null,
'filters' => array() // array('filterName' => 'BSON\Filter\Class')
)
),
'driver' => array(
'odm_default' => array(
'drivers' => array()
)
),
'documentmanager' => array(
'odm_default' => array(
'connection' => 'odm_default',
'configuration' => 'odm_default',
'eventmanager' => 'odm_default'
)
),
'eventmanager' => array(
'odm_default' => array(
'subscribers' => array()
)
),
),
);
В настоящее время появляется ошибка: класс 'Application \ Document \ User' не был найден в цепи сконфигурировано пространств имен
Я могу получить документы для сохранения, однако у меня возникают проблемы с получением документов. Вам удалось это сделать? –
@ Zoop-Josh В чем твоя проблема? Неужели гидратор не нашел ошибку? – dextervip
Это была ошибка гидратора. Однако, поскольку вы его подняли, я перепроверил ваши инструкции, и это было так; обновить пути гидратора! Благодаря! –