我正在构建一个 ZF2+mongoDB+Doctrine ODM 应用程序。
我正在尝试使用一些模式,并且我需要 Documents 能够从数据库中获取其他 Documents。
我的问题是我无法在 Document.xml 中获取 DocumentManager 实例。我只能在控制器中获取它。
我希望避免将 $dm 作为参数传递给工厂生产线的每个模型。
你能指导我在我的模型中获取 ODM 文档管理器吗?
谢谢!
我正在构建一个 ZF2+mongoDB+Doctrine ODM 应用程序。
我正在尝试使用一些模式,并且我需要 Documents 能够从数据库中获取其他 Documents。
我的问题是我无法在 Document.xml 中获取 DocumentManager 实例。我只能在控制器中获取它。
我希望避免将 $dm 作为参数传递给工厂生产线的每个模型。
你能指导我在我的模型中获取 ODM 文档管理器吗?
谢谢!
实际上,您不应该在文档中获取 documentManager。始终通过 ServiceLocator 获取 DM 并在您的服务/模型/控制器中使用它。在控制器级别通过 DM 持久化文档不是一个好习惯。控制器应该使用相关的服务/模型接口来做到这一点。
对于您的问题,模型和/或服务应实现 ServiceLocatorAwareInterface 并正确配置为使用 SM。
如果您在每个服务/模型实例中都需要 DM,只需为此编写一个工厂或初始化程序。形成文档:
Initializers :您可能希望始终调用某些注入点。例如,您通过实现 Zend\EventManager\EventManagerAwareInterface 的服务管理器加载的任何对象都应该接收到一个 EventManager 实例。初始化器是 PHP 回调或实现 Zend\ServiceManager\InitializerInterface 的类。他们收到新实例,然后可以对其进行操作。
此SO 答案还详细说明了如何使用 EntityManager 执行此操作(在服务中获取 EM),但 DocumentManager 的逻辑相同。