Реализация Zend MongoDB

Я пытаюсь интегрировать Zend с MongoDB. Кажется, я почти закончил, но мне нужна помощь, чтобы выполнить задание. Я новичок в zend и mongo, но имею достаточный опыт работы с PHP и MySQL.

Некоторые детали:

Мой проект Zend основан на основном руководстве по адресу http://framework.zend.com/manual/2.0/en/user-guide/skeleton-application.html. Это отлично работает на моем компьютере, но основано на mysql.

Я установил MongoDB. Я могу написать nosql в командной строке и создать экземпляр объекта MongoClient в PHP-скрипте, так что эти вещи, кажется, работают и взаимодействуют друг с другом.

Я хочу использовать mongo вместо mysql, и я реализовал Doctrine. Я понятия не имею, что делает Doctrine, и я провел несколько поисков, чтобы попытаться найти, как запускать команды mongo в zend. Эти факты приводят меня к выводу, что я не знаю, что делаю.

Итак, к специфике моего вопроса:

  • Насколько я понимаю, я должен где-то создавать экземпляр объекта монго. Если да, то где я должен поместить экземпляр в Zend?
  • Если нет, то, по-видимому, мне нужен существующий экземпляр объекта монго для запуска различных команд поиска/сохранения из класса модели, поэтому, если это правда, как мне получить доступ к существующему объекту монго?

Спасибо за любую помощь, и уточняющие вопросы одинаково приветствуются.

Отредактировано 12 декабря 2012 г. для уточнения.

С данными ответами кажется, что я на правильном пути, и я могу уточнить, что мне нужно: глядя на Документация Doctrine, ссылка на которую приведена ниже, я до сих пор не понимаю, где должен происходить экземпляр диспетчера документов. Я ожидал, что он перейдет в более общее место, которое запускается при каждой загрузке страницы. Кроме того, большинство руководств, которые я нахожу, относятся к файловой структуре, отличной от структуры приложения, поэтому, когда они говорят помещать определенные вещи в определенные места, я не уверен, что они имеют в виду. Например, я постоянно вижу ссылки на файлы начальной загрузки, но мои единственные файлы начальной загрузки находятся в тестовых каталогах.

Мои вопросы таковы:

  • Какой код мне нужно добавить в функцию indexAction (которая обязательно срабатывает, когда я перехожу по правильному URL-адресу), если я просто хочу распечатать все документы в коллекции?
  • Нужно ли мне добавлять какой-либо другой код в другом месте, если да, то где и какой код?

person Shoreline    schedule 10.12.2012    source источник


Ответы (2)


Это разные биты и то, что они делают, работая снизу вверх:

mongodb: сохранение данных

doctrineODM: средство сопоставления документов объектов. Это сопоставляет документы mongo с объектами php. Это означает, что вам не нужно беспокоиться о каких-либо вызовах монго напрямую — вы просто работаете с простыми старыми объектами php. Чтобы использовать DoctrineODM, вам нужно определить классы вашей модели и научиться использовать DocumentManager — рекомендуется, документация Doctrine довольно хороша.

doctrineMongoODMModule: модуль, который интегрирует доктрину с zf2. Главное, что он делает, это позволяет вам настроить доктрину, используя стиль конфигурации zf2, и дает вам доступ к DocumentManager через zf2 ServiceManager. (Я делаю еще несколько вещей, но они основные)

zf2 (mvc): позволяет определить интерфейс, чтобы другие вещи (например, веб-клиент) могли управлять вашими документами.

person superdweebie    schedule 11.12.2012
comment
Спасибо за объяснения. Приятно слышать это от кого-то с точки зрения конкретных моих требований. Это будет полезно для меня, чтобы уточнить мой вопрос позже. Я подозреваю, что мне нужно знать, куда должны идти файлы кода конфигурации. - person Shoreline; 13.12.2012

Существует великолепный модуль doctrine-mongo-odm-module для доступа к mongoDB. Просто добавьте в composer.json

"require": {   
....
"doctrine/doctrine-mongo-odm-module": "dev-master",
....

Документация Doctrine должна помогите как пользоваться.

person Zdenek Machek    schedule 10.12.2012
comment
Это здорово, спасибо за это. Я сделал это, так что я явно на правильном пути. Я лучше понимаю, что мне нужно знать, поэтому мне придется уточнить свой вопрос. - person Shoreline; 13.12.2012