2

我一直在寻找有关如何集成 Doctrine 2 和 Zend Framework 1.12(或 1.11 或其他 - 我真的不知道它是否重要但我使用的是 1.12)的解释。我可以在 Stack Overflow 中找到几篇博客文章,甚至解决问题,但在阅读完一篇之后,我无法得到我想要的东西:在模块化应用程序中做。因此,如果有人能给我实现这一目标的钥匙,我将不胜感激。

非常感谢你!

编辑:
谢谢你们的回复,但最近发布的 ZF2 让我决定离开 ZF1,以便利用所有新的改进和功能。正如@KTastrophy 所说,现在集成 ZF 和 Doctrine 要容易得多(我什至敢说一切都更容易,更符合 ZF2)。多谢一次!

4

3 回答 3

2

使用原则 PEAR 安装可以轻松地将原则 2 与 ZF 集成。安装后,您只需将其放入引导程序中:

protected function _initDoctrine() {
    require_once "Doctrine/ORM/Tools/Setup.php";
    \Doctrine\ORM\Tools\Setup::registerAutoloadPEAR();

    $options = $this->getOptions();

    $loader = new \Doctrine\Common\ClassLoader('YourNamespace', realpath(APPLICATION_PATH . "/../library"));
    $loader->register();


    $isDevMode = (APPLICATION_ENV == 'production') ? false: true;
    $entityManager = \Doctrine\ORM\EntityManager::create(
        $options['doctrine']['dbal'],
        \Doctrine\ORM\Tools\Setup::createYAMLMetadataConfiguration(array(
            realpath(APPLICATION_PATH."/../library/YourNamespace/Yaml"),
        ), $isDevMode)
    );

    Zend_Registry::set('entityManager', $entityManager);

    return $entityManager;
}

从配置文件中$this->getOptions()检索数据库名称、用户和密码。

于 2012-09-08T16:58:28.917 回答
0

如果以本教程为例

http://christian.soronellas.es/2010/12/19/zend-framework-and-doctrine-2/?lang=en

看这部分配置代码

$config = new Configuration();         
$config -> setMetadataCacheImpl($cache);         
$driverImpl = $config -> newDefaultAnnotationDriver($options['entitiesPath']);         
$config -> setMetadataDriverImpl($driverImpl);        
 $config -> setQueryCacheImpl($cache);        
 $config -> setProxyDir($options['proxiesPath']);         
$config -> setProxyNamespace('Application\Models\Proxies');         
$config -> setAutoGenerateProxyClasses(('development' == APPLICATION_ENV));        
 $em = EntityManager::create(             $this -> _buildConnectionOptions($options),             $config        );

函数 newDefaultAnnotationDriver 实际上采用了一个实体路径数组。这为您创造了发挥创造力的机会。当我发现这一点时,我只是在每个模块中创建了一个实体文件夹,并将每个路径沿数组中的 newDefaultAnnotationDriver 参数传递。当然,通过这样做,您需要为每个模块设置命名空间。

于 2012-09-07T15:22:18.800 回答
-1

我用比斯纳

您应该应用此补丁https://github.com/guilhermeblanco/ZendFramework1-Doctrine2/pull/45

这对我很有效。

在控制器中,我有这个功能来检索实体管理器

/**
 * Retrieve the Doctrine Container.
 *
 * @return Doctrine\ORM\EntityManager
 */
public function getEntityManager()
{
    return $this->getInvokeArg('bootstrap')->getResource('doctrine')->getEntityManager();
}
于 2012-09-08T13:55:09.260 回答