Документ для поиска других документов с помощью ODM и ZF2

Я создаю приложение ZF2 + mongoDB + Doctrine ODM.

Я пытаюсь использовать некоторые шаблоны, и мне нужно, чтобы документы могли извлекать другие документы из базы данных.

Моя проблема в том, что я не могу получить экземпляр DocumentManager внутри документа. Я могу получить его только внутри контроллера.

Я хочу избежать необходимости передавать $dm в качестве параметра каждой модели по линии фабрик.

Не могли бы вы помочь мне установить ODM Document Manager в мои модели?

Спасибо!


person Martín Peverelli    schedule 21.08.2013    source источник


Ответы (1)


На самом деле вы не должны получать documentManager внутри документа. Всегда получайте DM через ServiceLocator и используйте его в своих Сервисах/Моделях/Контроллерах. Сохранение документов через DM на уровне контроллера не рекомендуется. Для этого контроллеры должны использовать соответствующие интерфейсы службы/модели.

По вашему вопросу модели и/или службы должны реализовывать ServiceLocatorAwareInterface и должным образом настроены для использования SM.

Если вам нужен DM в каждом экземпляре службы/модели, просто напишите для этого фабрику или инициализатор. Сформируйте документацию:

Инициализаторы: вы можете захотеть, чтобы определенные точки инъекции вызывались всегда. Например, любой объект, который вы загружаете через диспетчер служб, реализующий Zend\EventManager\EventManagerAwareInterface, скорее всего, должен получить экземпляр EventManager. Инициализаторы — это обратные вызовы PHP или классы, реализующие Zend\ServiceManager\InitializerInterface. Они получают новый экземпляр и затем могут манипулировать им.

Также этот SO answer подробно объясняет, как сделайте это (получите EM в сервисах) с помощью EntityManager, но логика будет такой же для DocumentManager.

person edigu    schedule 21.08.2013
comment
Спасибо! Это направило меня в правильном направлении, чтобы прочитать и реализовать решение. - person Martín Peverelli; 23.08.2013