【问题标题】:Zend Framework - Doctrine2 - Store EntityManager As Global Variable?Zend Framework - Doctrine2 - 将 EntityManager 存储为全局变量?
【发布时间】:2012-02-14 15:27:39
【问题描述】:

我正在构建我的第一个 Zend/Doctrine 项目,并希望能够使用以下方式访问我的控制器中的 Doctrine2 实体管理器:

$this->em->persist($item);

有没有办法做到这一点,或者当 Doctrine 被引导时我应该把它放在 Zend_Registry 中?

【问题讨论】:

    标签: zend-framework doctrine-orm


    【解决方案1】:

    在某种程度上,这取决于你如何引导 Doctrine。结果是将 EntityManager 作为资源存储在 Bootstrap 中,然后在控制器中检索它。

    例如,如果您有方法 Bootstrap::_initDoctrine() 来实例化实体管理器,则返回此实例会将其作为资源存储在引导程序中,键为 'doctrine'。然后,在控制器的 init() 方法中,您可以:

    $this->em = $this->getInvokeArg('bootstrap')->getResource('doctrine');
    

    或者,如果您使用Bisna application resource plugin for Doctrine,那么您必须再下推一级才能获得实体管理器:

    $this->em = $this->getInvokeArg('bootstrap')->getResource('doctrine')->getEntityManager();
    

    【讨论】:

    • 我有一个 DoctrineEntityManager 资源,它初始化了 Doctrine Framework 并创建了一个 EntityManager 实例。但是,我还想将 ZFDebug 工具与 Doctrine 一起使用,因此我不得不使用 Bootstrap.php 来初始化 Doctrine 和 ZFDebug,因为 ZFDebug 作为插件或 Bootstrap 初始化功能,需要 EntityManager 的实例——这就是除非第一次初始化 Doctrine,否则这是不可能的。 Matthew Weier O'Phinney 写了一个动作助手mwop.net/blog/… 允许在动作中使用 $this->em
    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2019-07-23
    相关资源
    最近更新 更多