学说2 - 从课堂上获取实体经理

时间:2012-09-21 18:10:08

标签: php doctrine doctrine-orm

我无法弄清楚如何从我的服务层和模板控制器中获取Doctrine实体管理器..

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

更新:我将举例

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

我无法弄清楚我应该从哪里获取用户?所以我不必将实体经理作为参数发送。

1 个答案:

答案 0 :(得分:2)

选择dependency injection而非单身人士。

我不知道你在哪个环境中使用Doctrine,但我认为它是MVC - 然后任何Controller都应该有权访问实体管理器,或者通过将它作为构造函数参数传递,或者通过使用setter注入它

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

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