1

我不知道如何最好地从我的服务层和模板控制器中获取 Doctrine Entity Manager..

我想制作一个单身人士,这样我总能得到实体管理器,但这是正确的做法吗?

更新:我举个例子

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 );
    }

我不知道我应该从哪里获得用户?所以我不必将实体管理器作为参数发送。

4

1 回答 1

2

选择依赖注入而不是单例。

我不知道您在哪个环境中使用 Doctrine,但我假设它是 MVC - 那么任何控制器都应该有权访问实体管理器,或者通过将其作为构造函数参数传递,或者通过使用 setter 注入它。

通过这种方式,您可以控制器中获取内容,并最终将其传递给Auth类。

无论如何,我认为授权不需要外部类 - 我只需loginAction在控制器中编写一个方法,从 HTTP 请求中获取用户名和密码并进行通常的考虑 [获取用户/检查密码是否正确],然后存储在成功登录的情况下会话中的某些内容。

于 2012-09-21T18:46:21.553 回答