2012-09-21 62 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