我一直在寻找关于如何整合Doctrine 2和Zend Framework 1.12(或1.11或其他 - 我真的不知道它是否重要但我正在使用的是1.12)的解释。我可以在Stack Overflow中找到几个博客文章,甚至可以解决问题,但在阅读完毕后,我无法理解我的目标:在模块化应用程序中执行。所以,如果有人能给我实现这一目标的钥匙,我将非常感激。
非常感谢!
修改
谢谢各位回复,但最近发布的ZF2让我决定离开ZF1,以便利用所有新的改进和功能。正如@KTastrophy所说,现在整合ZF和Doctrine要容易得多(我甚至敢说一切都比ZF2更容易和更一致)。再次感谢你!
答案 0 :(得分:2)
使用doctrine PEAR安装将doctrine 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()
从配置文件中检索数据库名称,用户和密码。
答案 1 :(得分: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参数传递每个路径。当然,通过这样做,您将需要为每个模块设置命名空间。
答案 2 :(得分:-1)
我使用Bisna
您应该应用此修补程序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();
}