我正在构建一个ZF2 + mongoDB + Doctrine ODM应用程序。
我正在尝试使用某些模式,我需要Documents才能从数据库中获取其他文档。
我的问题是我无法在Document中获取DocumentManager实例。我只能把它放在控制器里面。
我希望避免将$ dm作为参数传递给工厂的每个模型。
您能指导我在我的模型中获取ODM Document Manager吗?
谢谢!
答案 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的逻辑相同。