【问题标题】:Using PersistentObject from Doctrine in Zend Framework在 Zend 框架中使用 Doctrine 中的 PersistentObject
【发布时间】:2013-04-05 20:09:39
【问题描述】:

我有一个问题要问大家。在我使用 Codeigniter 大约 1 年后,我才开始使用 Zend Framework。我已经安装了所有东西,现在一切都在运行。但我有一个问题。我想使用 Doctrine 进行建模。而且我总是使用 Doctrine 中的 PersistentObject,但我似乎无法让它工作。

问题是我需要通过一个 ObjectManager 到 PersistentObject。但我不能让它工作。有谁知道我如何将 ObjectManger 从 DoctrineORM 模块传递到 PersistentObject?

如果我不够清楚,你可以告诉我。说英语对我来说有点麻烦。对此我很抱歉!

【问题讨论】:

  • 这里可能有几个人理解这个问题,但我不理解。您能否提供一些您尝试过的代码?也许那时我会理解你的担忧。 ObjectManager 可以通过$this->getServiceLocator()->get('Doctrine\ORM\EntityManager'); 获取
  • 对不起...也许我的问题不是很清楚。我想使用 Doctrine 中的 PersistentObject,因此我必须在 PersistentObject 类中使用 setObjectManager 设置 objectManger。我不想在每个实体中都这样做,但我想这样做一次。因此,我必须在代码中的某处调用 PersistentObject::setObjectManager。但我不知道在哪里做......我希望我现在对你来说更清楚一点!
  • 您需要指定 Zend Framework 1 或 2 的哪个版本,以及您尝试实现的 Doctrine 的哪个版本不会受到影响。
  • 非常抱歉。它是 ZendFramework 2 和 Doctrine 2。但@timdev 给了我正确的答案。谢谢你们的时间。下次我尽量说清楚!

标签: php doctrine zend-framework2


【解决方案1】:

您可以在模块的 onBootstrap() 方法中执行此操作:

<?php
namespace MyApplication;
use Doctrine\Common\Persistence\PersistentObject;

class Module {

    public function onBootstrap($e){
        $serviceManager = $e->getApplication()->getServiceManager();
        PersistentObject::setObjectManager($sm->get('Doctrine\ORM\EntityManager');
    }

}

【讨论】:

  • 你是最棒的!非常感谢你。我想我需要向 serviceManager 学习更多。这是 Zend 框架 2 中的一种注册方式吗?
  • 是的,ZF2 中的 ServiceManager 在某种程度上取代了 ZF1 的 Zend_Registry 组件——而且功能更多。最大的区别在于,您只需注册工厂(或者如果没有依赖项,请将您的类注册为可调用),而不是在引导期间创建服务。因此,您可以获得两个主要好处:延迟加载(类不会被实例化,除非/直到您需要它们),以及一些依赖管理(在您的工厂中定义)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多