2012-10-11 66 views
3

我成爲了一個大型遺留Web應用程序的負責人,我試圖慢慢地將其重構爲Symfony2框架。我做的第一件事就是包括教義。Doctrine的名稱空間別名

我已經在Composer的幫助下安裝了Doctrine,併爲它設置了一個引導文件。我的實體爲了避免未來的複雜性,已經遵循命名空間方案Company\BundleName\Entity\Object。以下作品:

$em->getRepository('Company\\BundleName\\Entity\\Object') 
    ->find($id) 
; 

我無法找到如何告知命名空間別名的學說作爲Symfony2中是否有任何引用,這樣我就可以寫

$em->getRepository('CompanyBundleName:Object') 
    ->find($id) 
; 

代替。我怎樣才能做到這一點?

+0

你的包設置是否正確(使用CompanyBundle.php文件,並在AppKernel.php中註冊)? – domudall

+1

你讀過我寫的嗎?除了學說之外,還沒有成立 - 計劃將來會遷移到Symfony2。目前還沒有捆綁包 - 我只是將我的實體命名爲空間以避免將來出現問題。我想知道如何手動設置名稱空間別名與Doctrine。 – nijansen

+1

這個功能是由DoctrineBridge包在Symfony2中設置的,特別是getMappingDriverBundleConfigDefaults函數 - https://github.com/symfony/DoctrineBridge/blob/master/DependencyInjection/AbstractDoctrineExtension.php#L166 如果你想反映這個沒有Symfony2的功能,你需要擴展Doctrine實體管理器並在getRepository函數中自己生成前綴。它不是教義系統的一部分。 – domudall

回答

1

這個功能由Symfony2由DoctrineBridge捆綁包設置,特別是getMappingDriverBundleConfigDefaults function

如果您想在沒有Symfony2的情況下反映此功能,您需要擴展Doctrine實體管理器並在getRepository函數中自己生成前綴。它不是教義系統的一部分。

4

現在有一個簡單的方法:

$config = Setup::createAnnotationMetadataConfiguration(...); 
$config->addEntityNamespace('CompanyBundleName', 'Company\BundleName\Entity'); 

會做你想要什麼。我花了好幾個小時才找到這個!它不在任何我能找到的文檔中。

相關問題