,如果我做整合的Zend Framework 1.10學說2我應該把我的學說型號/實體和代理?我想到了/application
或/library
目錄。如果我把在/library
目錄壽都,將它與ZF自動加載類的干擾,從那裏,因爲班會有使用PHP 5.3的命名空間VS PEAR風格命名空間。整合ZF/Doctrine2:我在哪裏把我的模型/實體和代理類
回答
我的工作與ZF1.10 also.You學說2集成並不需要在所有使用的原則自動加載的應用程序。
1)在你的application.ini文件中添加以下行(假設你已經安裝學說庫中的文件夾(與Zend的文件夾):
autoloadernamespaces.doctrine = "Doctrine"
2)創建一個學說或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 = "Doctrine\Common\Cache\ApcCache"
resources.entitymanager.metadata.cache = "Doctrine\Common\Cache\ApcCache"
resources.entitymanager.metadata.driver = "Doctrine\ORM\Mapping\Driver\AnnotationDriver"
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 Doctrine\ORM\EntityManager
*/
protected $_em;
public function init()
{
$this->_em = $this->getEntityManager();
return $this->_em;
}
public function getEntityManager()
{
$options = $this->getOptions();
$config = new \Doctrine\ORM\Configuration();
$config->setProxyDir($options['metadata']['proxyDir']);
$config->setProxyNamespace('Proxy');
$config->setAutoGenerateProxyClasses((APPLICATION_ENV == 'development'));
$driverImpl = $config->newDefaultAnnotationDriver($options['metadata']['entityDir']);
$config->setMetadataDriverImpl($driverImpl);
$cache = new Doctrine\Common\Cache\ArrayCache();
$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);
$evm = new Doctrine\Common\EventManager();
$em = Doctrine\ORM\EntityManager::create($options['db'],$config,$evm);
return $em;
}
}
學說2實體管理器現在可用於您的應用程序。在你的控制器,你可以抓住它,像這樣:
$bootstrap = $this->getInvokeArg('bootstrap');
$em = $bootstrap->getResource('entitymanager');
我相信這將幫助別人:)
我會把模型在同一目錄下的「正常」 Zend框架模型生活。 /models
你可以告訴Doctrine在這個地方生成模型,並在"Default_Model"
之前加上前綴。
退房約翰Lebenshold截屏約Zend框架的一個學說
我使用學說2的使用PHP 5.3「真」的命名空間,我不認爲我能做到這一點?我如何告訴zend自動加載器從「APPLICATION_PATH」加載我的「實體」和「代理」?我設法通過將我的實體和代理放在'library/Application'中來使它工作,它們位於包含路徑中,因此它可以工作 – 2010-07-25 06:36:51
從理論上說,你可以把任何地方,然後,只要命名空間解析正確。
我建議這樣的結構:
/application/models/MyApp/Entities
/application/models/MyApp/Proxies
裝入 'MyApp的' 使用學說的ClassLoader。我已經使用帶有Zend裝載機的裝載機學說(如果你有使用PEAR慣例命名空間文件夾中的類,你仍然需要使用Zend加載器)沒有衝突。
請記住,「模型」可不止是你的實體類的更多。我的模型層由接口,工廠,驗證器和服務對象組成。爲此,任何特定於應用程序的業務邏輯都應該放在模型文件夾中。
如何配置Doctrine類加載器以使用zend自動加載器?我目前將我的實體放入'/ library/Application'文件夾中。然後在application.ini中添加'autoloaderNamespaces [] = Application'。它工作正常,因爲Zend Loader似乎能夠使用PHP 5.3命名空間,但是我無法從'include_path'之外的某處加載類。我很高興知道我可以如何使用Doctrine類加載器和Zend(指定自定義位置來查找文件)來執行此操作 – 2010-07-25 14:20:06
請參閱本手冊的此部分:http://www.doctrine-project.org/projects/orm/ 2.0/docs/reference/configuration/en#bootstrapping:class-loading:git基本上,您可以使用Doctrine的ClassLoader加載任何PHP 5.3命名空間。只需提供基本的命名空間的名稱(如「主義」或「MyApp的」,並以文件夾的路徑,然後可以導入任何命名空間的類與「使用」關鍵字。 – 2010-07-25 19:13:17
我知道,我現在的問題是怎麼做的我將Doctrine類加載器作爲類加載器添加到我的Zend應用程序中? – 2010-07-26 06:30:33
- 1. 我把代碼放在哪裏?
- 2. 我必須把代碼放在哪裏?
- 3. 我在哪裏把response.success()?
- 4. 我在哪裏把composer.json
- 5. 我在哪裏把substr?
- 6. UJS - 我在哪裏把js.erb?
- 7. 添加ADO.NET實體數據模型後,我的DataModel類在哪裏
- 8. 我在哪裏把我的藍圖before_request
- 9. 我應該在哪裏把我的UpdatePanel
- 10. 我在哪裏把我的文件ndk
- 11. 實體模型應該在哪裏?
- 12. 在哪裏把我的疑問 - 模型與控制器
- 13. 我在哪裏把獨特的在我的代碼?
- 14. 我在哪裏把代碼引導到backbone.js集合?
- 15. 我在哪裏實例化我的視圖模型對象?
- 16. 我在哪裏把我的代碼放在Singleton中?
- 17. 我在哪裏把我想要在模塊中使用的CSS?
- 18. 我在哪裏可以把JSON代碼從我的富牌
- 19. asp.net-MVC我在哪裏可以把我自己的代碼
- 20. 我在哪裏放置整理條款?
- 21. 把我的計數器代碼放在我的php類codeigniter中的哪裏?
- 22. 我應該把我的asp.net-mvc強類型的viewdata放在哪裏?
- 23. 使用GAE將GWT中的模型實體類的代碼放在哪裏
- 24. 我應該在哪裏把接口和實現
- 25. 我在哪裏把ORDER BY放在這段代碼裏?
- 26. 在哪裏把我的.dll被訪問在我的罐子裏
- 27. 哪裏是我的實體 - Symfony2的
- 28. 實體代碼第一,我的DB文件存儲在哪裏?
- 29. 在哪裏把我的taglib聲明?
- 30. 在哪裏把我的dajax文件? Django
以及存儲庫如何? @Entity(repositoryClass =「Entities \ ArticlesRepository」)我無法加載它們:( – cirpo 2010-11-13 11:42:36
作爲參考,我還沒有機會使用此功能(Magento太忙了)根據文檔,對於repositorClass值必須是擴展學說\ ORM \ EntityRepository。 – David 2010-11-14 04:05:18
也是一個完全合格的類名,你應該知道,你有例子是一個命名空間中的類。如果你不使用的命名空間,嘗試將完整的類名稱放在那裏(例如:Module_Model_Entities_ArticlesRepository)。 – David 2010-11-14 04:13:29