2011-08-22 30 views
3

我有大約10個實體:\ APP \實體\用戶\軟件\實體\集團,...使用Doctrine ORM工作:自定義庫

對於他們每個人都有自己的倉庫:\軟件\庫\ UserRepository,...在十幾個方法中的每一個。

教義的訪問方法:

$userRepository = $em->getRepository('App\Entity\User'); 

然而,這是不方便的,因爲失去了代碼完成。

問題:如何組織工作,倉庫,在不增加靜態連接的代碼? 我應該使用一個靜態方法得到什麼?

class UserRepository extends EntityRepository 
{ 
    /** 
     * @static 
     * @return \App\Repository\UserRepository 
     */ 
    public static function get() 
    { 
     $em = \Registry::getInstance()->get('em'); 
     return $em->getRepository('App\Entity\User'); 
    } 
} 

我看着實現與交響樂的學說的工作,但與代碼完成同樣的問題。

回答

4

我不認爲有這種完全的任何解決方案,整潔。

您的選項基本上可以歸結爲二:

  • 靜態干將爲您展示。 問題:很難進行單元測試,隱藏依賴關係之類的東西Registry類,需要手動添加
  • 使用某種類型的getter一家工廠。 問題:需要手動添加工廠方法

我真的不認爲這是如此重要。倉庫不有很多方法在他們平時無論如何,所以它不是難記(或檢查)

然而,有一件事你也可以嘗試是這樣的:

/* @var My\Repository\FooRepository */ 
$repo = $em->getRepository('My\Repository\FooRepository'); 

這應該激活完成對於大多數IDE中的$repo。它仍然涉及一些額外的打字壽。

0

$此 - > _ EM可從存儲庫中。我用它所有的時間