php – 集成ZF / Doctrine2:我在哪里放置我的模型/实体和代理类
发布时间:2020-12-13 13:17:59 所属栏目:PHP教程 来源:网络整理
导读:如果我将Zend Framework 1.10与Doctrine 2集成在一起我在哪里放置我的Doctrine Models / Entities and Proxies?我想到了/ application或/ library目录.如果我确实放入/ library目录,那么它是否会干扰ZF自动加载类,因为那里的类将使用 PHP 5.3命名空间和PEAR
如果我将Zend Framework 1.10与Doctrine 2集成在一起我在哪里放置我的Doctrine Models / Entities and Proxies?我想到了/ application或/ library目录.如果我确实放入/ library目录,那么它是否会干扰ZF自动加载类,因为那里的类将使用
PHP 5.3命名空间和PEAR样式命名空间.
我正在开发一个将Doctrine 2与ZF1.10集成在一起的应用程序.你根本不需要使用Doctrine自动加载器.
1)在你的application.ini文件中添加以下行(假设你的库文件夹中安装了Doctrine(与Zend文件夹相同): autoloadernamespaces.doctrine = "Doctrine" 2)创建一个doctrine或entitymanager资源.在您的ini文件中: resources.entitymanager.db.driver = "pdo_mysql" resources.entitymanager.db.user = "user" resources.entitymanager.db.dbname = "db" resources.entitymanager.db.host = "localhost" resources.entitymanager.db.password = "pass" resources.entitymanager.query.cache = "DoctrineCommonCacheApcCache" resources.entitymanager.metadata.cache = "DoctrineCommonCacheApcCache" resources.entitymanager.metadata.driver = "DoctrineORMMappingDriverAnnotationDriver" resources.entitymanager.metadata.proxyDir = APPLICATION_PATH "/../data/proxies" resources.entitymanager.metadata.entityDir[] = APPLICATION_PATH "/models/entity" 3)接下来,您需要引导它.我在资源文件夹中添加了一个资源类.确保映射到ini文件中的文件夹: pluginPaths.Application_Resource_ = APPLICATION_PATH "/resources" 那你的资源类…… class Application_Resource_EntityManager extends Zend_Application_Resource_ResourceAbstract { /** * @var DoctrineORMEntityManager */ protected $_em; public function init() { $this->_em = $this->getEntityManager(); return $this->_em; } public function getEntityManager() { $options = $this->getOptions(); $config = new DoctrineORMConfiguration(); $config->setProxyDir($options['metadata']['proxyDir']); $config->setProxyNamespace('Proxy'); $config->setAutoGenerateProxyClasses((APPLICATION_ENV == 'development')); $driverImpl = $config->newDefaultAnnotationDriver($options['metadata']['entityDir']); $config->setMetadataDriverImpl($driverImpl); $cache = new DoctrineCommonCacheArrayCache(); $config->setMetadataCacheImpl($cache); $config->setQueryCacheImpl($cache); $evm = new DoctrineCommonEventManager(); $em = DoctrineORMEntityManager::create($options['db'],$config,$evm); return $em; } } 现在,您的应用程序可以使用doctrine 2实体管理器.在您的控制器中,您可以像这样抓住它: $bootstrap = $this->getInvokeArg('bootstrap'); $em = $bootstrap->getResource('entitymanager'); 我相信这会对某人有所帮助:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |