2012-09-21 77 views
1

實體經理,我無法弄清楚它是如何最好地從我的服務層獲得主義實體管理器,模板控制器..學說2 - 獲取從

我想製作一個單身,所以我總是可以得到實體經理,但這是否正確嗎?

更新:我舉個例子

class Auth 
{ 
    const USER_ENTITY_NAME = 'Entities\User'; 

    private $isVerified = FALSE; 

    public static function login($email, $password, $em, $rememberMe = false) 
    { 
     if(empty($email) OR empty($password)) 
     { 
      // new login response 

     } 

     if($user = (self::getUser($email, $password, $em) !== null)) 
     { 
      $sreg = SessionRegistry::instance(); 
      $sreg->set("user_id", $user->getId()); 
     } 
     return $user; 
    } 

    public static function getUser($email, $password, $em) 
    { 
     return $em->getRepository(
      USER_ENTITY_NAME); 
    } 

我無法弄清楚是我應該得到的用戶?所以我不必發送實體管理器作爲參數。

+0

所有的存儲庫都可以通過' - > getEntityManager()'訪問實體管理器,因此大多數人傾向於在自定義存儲庫中完成工作。這就是我所見過的最主要的和我自己使用的東西。 – Orbling

+0

好吧,但如何從另一個類獲取存儲庫?我需要實體經理了......我想我在這裏錯過了一些東西,我有一個授權類,我需要讓用戶看看用戶是否存在。 – Saggo

+0

基本上,在實體中,您可以訪問的唯一其他實體是關聯和任何從外部傳入的方法。在存儲庫中,您可以訪問實體管理器,因此您可以訪問數據庫。 – Orbling

回答

2

在單身人士身上選擇dependency injection

我不知道你在哪個環境中使用Doctrine,但我認爲它是MVC - 那麼任何控制器都應該有權訪問實體管理器,或者通過將它作爲構造器參數傳遞,或者通過注入它二傳手。

這樣你就可以從取東西控制器,並把它傳遞給Auth類最後。

無論如何,我認爲授權不需要外部類 - 我只是在控制器中寫一個loginAction方法,從HTTP請求獲取用戶名和密碼,並做出通常的考慮[取回用戶/檢查密碼是右鍵],然後在會話中保存一些東西,以備成功登錄。

+0

非常感謝你的答案..我做了一個依賴類,所以實體管理器總是可用於我的控制器.. – Saggo