Symfony 用户提供程序构造函数第2个参数
我有一个简单的自定义用户提供程序Symfony 用户提供程序构造函数第2个参数,symfony,service,doctrine-orm,Symfony,Service,Doctrine Orm,我有一个简单的自定义用户提供程序 class UserProvider extends EntityRepository implements UserProviderInterface { public function loadUserByUsername($username) { $q = $this ->createQueryBuilder('u') ->where('u.username = :username OR u.email
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: Ent\UserBundle\Entity\UserProvider
arguments:
em: "@doctrine"
我犯了这个错误
ContextErrorException: Catchable Fatal Error: Argument 2 passed to Doctrine\ORM\EntityRepository::__construct() must be an instance of Doctrine\ORM\Mapping\ClassMetadata, none given
我知道它需要两个参数,第二个是Mapping\ClassMetadata,但是我应该在服务上给出什么作为参数呢
提前感谢,
UserProvider
类中创建构造:
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Doctrine\ORM\EntityManager;
...
class UserProvider implements UserProviderInterface
{
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function loadUserByUsername($username)
{
$q = $this->em->getRepository('Acme\DemoBundle\Entity\User')->createQueryBuilder('u')
->where('u.username = :username OR u.email = :email')
->setParameter('username', $username)
->setParameter('email', $username)
->getQuery();
....
}
// other methods required by UserProviderInterface
}
ent.user_provider:
class: Ent\UserBundle\Entity\UserProvider
arguments: ["@doctrine.orm.default_entity_manager"]
这是用Symfony 2.5测试的。谢谢,但具体参数是什么?我对条令\ORM\EntityManager也有同样的问题,它需要一个条令\ORM\Mapping\ClassMetadata,我不知道如何给它…首先尝试清除缓存,因为你不能得到与EntityManager获得不同参数相同的错误。是的,我忘了清除缓存对不起,现在它需要一个条令\DBAL\连接作为第一个参数。。。“@doctor.connection”但通过ContainerWare扩展它会更快,因为您在获取EntityManager的第二个参数时可能会遇到问题。好的,这似乎可行,没有更多错误,但$this->container为null…因此我无法访问EntityManager。。。