我有一个简单的自定义UserProvider
class UserProvider extends EntityRepository implements UserProviderInterface
{
public function loadUserByUsername($username)
{
$q = $this
->createQueryBuilder('u')
->where('u.username = :username OR u.email = :email')
->setParameter('username', $username)
->setParameter('email', $username)
->getQuery();
try {
$user = $q->getSingleResult();
} catch (NoResultException $e) {
$message = sprintf(
'Unable to find an active admin EntUserBundle:User object identified by "%s".',
$username
);
throw new UsernameNotFoundException($message, 0, $e);
}
return $user;
}
public function refreshUser(UserInterface $user)
{
$class = get_class($user);
if (!$this->supportsClass($class)) {
throw new UnsupportedUserException(
sprintf(
'Instances of "%s" are not supported.',
$class
)
);
}
return $this->find($user->getId());
}
public function supportsClass($class)
{
return $this->getEntityName() === $class
|| is_subclass_of($class, $this->getEntityName());
}
}
和相应的服务
ent.user_provider:
class: EntUserBundleEntityUserProvider
arguments:
em: "@doctrine"
我有这个错误
ContextErrorException: Catchable Fatal Error: Argument 2 passed to DoctrineORMEntityRepository::__construct() must be an instance of DoctrineORMMappingClassMetadata, none given
我知道Symfony API需要2个参数,第二个是MappingClassMetadata,但我到底应该给什么作为服务的参数?
提前致谢
-
在
UserProvider
类中创建构造:use SymfonyComponentSecurityCoreUserUserProviderInterface; use DoctrineORMEntityManager; ... class UserProvider implements UserProviderInterface { protected $em; public function __construct(EntityManager $em) { $this->em = $em; } public function loadUserByUsername($username) { $q = $this->em->getRepository('AcmeDemoBundleEntityUser')->createQueryBuilder('u') ->where('u.username = :username OR u.email = :email') ->setParameter('username', $username) ->setParameter('email', $username) ->getQuery(); .... } // other methods required by UserProviderInterface }
-
服务。yml:
ent.user_provider: class: EntUserBundleEntityUserProvider arguments: ["@doctrine.orm.default_entity_manager"]
在Symfony 2.5中测试过。