使用ODM和ZF2搜索其他文档的文档

时间:2013-08-21 04:29:17

标签: php mongodb zend-framework2 doctrine-odm odm

我正在构建一个ZF2 + mongoDB + Doctrine ODM应用程序。

我正在尝试使用某些模式,我需要Documents才能从数据库中获取其他文档。

我的问题是我无法在Document中获取DocumentManager实例。我只能把它放在控制器里面。

我希望避免将$ dm作为参数传递给工厂的每个模型。

您能指导我在我的模型中获取ODM Document Manager吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

实际上,您不应该在文档中获取documentManager。始终通过ServiceLocator获取DM并在您的服务/模型/控制器中使用它。在控制器级别通过DM保留文档为not a good practice。控制器应该使用相关的服务/模型接口来实现这一点。

对于您的问题,模型和/或服务应实现ServiceLocatorAwareInterface并正确配置为使用SM。

如果在每个服务/模型实例中都需要DM,只需为此编写工厂或初始化程序。形成documentation

  

初始化器:您可能希望始终使用某些注射点   调用。例如,您通过服务管理器加载的任何对象   实现Zend \ EventManager \ EventManagerAwareInterface应该   可能会收到一个EventManager实例。初始化器是PHP   回调或类实现   Zend的\的ServiceManager \ InitializerInterface。他们收到新的   实例,然后可以操纵它。

SO answer详细说明如何使用EntityManager执行此操作(在服务中获取EM),但DocumentManager的逻辑相同。