我无法弄清楚如何从我的服务层和模板控制器中获取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 );
}
我无法弄清楚我应该从哪里获取用户?所以我不必将实体经理作为参数发送。
答案 0 :(得分:2)
选择dependency injection而非单身人士。
我不知道你在哪个环境中使用Doctrine,但我认为它是MVC - 然后任何Controller都应该有权访问实体管理器,或者通过将它作为构造函数参数传递,或者通过使用setter注入它
通过这种方式,您可以从控制器中获取的内容,并最终将其传递给Auth
类。
无论如何,我认为授权不需要外部类 - 我只是在控制器中编写一个loginAction
方法,从HTTP请求中获取用户名和密码并进行常规考虑[获取用户/检查如果密码是正确的],则在成功登录的情况下将某些内容存储在会话中。