我不使用FOSUserBundle并且我有一个UserRepository来管理我的用户:
<?php
class UserRepository 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) {
throw new UsernameNotFoundException(sprintf('Unable to find an active User object identified by "%s".', $username), 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->loadUserByUsername($user->getUsername());
}
public function supportsClass($class)
{
return $this->getEntityName() === $class || is_subclass_of($class, $this->getEntityName());
}
protected function findUserBy(array $criteria)
{
$userRepository = $this->getEntityManager()->getRepository('FindBack\SiteBundle\Entity\User');
return $userRepository->findOneBy($criteria);
}
}
我想在我的应用程序中使用FOSFacebookBundle,所以我按照以下配置步骤进行操作:FOSFacebookBundle文档
因此,我必须定义一个自定义FacebookProvider并创建相关服务:
services:
my.facebook.user:
class: Acme\MyBundle\Security\User\Provider\FacebookProvider
arguments:
facebook: "@fos_facebook.api"
userManager: "@fos_user.user_manager"
validator: "@validator"
我没有任何 userManager,但我有一个 UserProvider,它是我的 UserRepository。我是否必须像这样将 userManager 设置为我的 UserRepository :
userManager: "@my_user_repository" ?
我的用户提供程序在config.yml中以这种方式定义:
providers:
main:
entity: { class: FindBackSiteBundle:User }
我是否必须将其作为服务才能将其用作参数(见上文)?
我试图这样做,但失败了。我想我必须为我的 user_repository 服务设置参数,因为它扩展了 EntityRepository。
我实际上得到了一个错误:
... Doctrine\ORM\EntityRepository::__construct() 必须是 Doctrine\ORM\Mapping\ClassMetadata 的一个实例,没有给出...
有没有办法在没有 FOSUserBundle的情况下将FOSFacebookBundle与我自己的 User 东西集成?
提前致谢 !