1


我不使用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 东西集成?

提前致谢 !

4

0 回答 0