Symfony FOSUserBundle出错,传递的参数必须是ObjectManager的实例

Symfony FOSUserBundle出错,传递的参数必须是ObjectManager的实例,symfony,doctrine,fosuserbundle,Symfony,Doctrine,Fosuserbundle,我看过所有关于这个主题的帖子,但没有任何帮助。我想我的问题有点不同。我在symfony4项目中使用FOSUser包。当我访问我的网站时,出现以下错误: Argument 3 passed to FOS\UserBundle\Doctrine\UserManager::__construct() must be an instance of Doctrine\Common\Persistence\ObjectManager, instance of ContainerVxxTSSB\EntityM

我看过所有关于这个主题的帖子,但没有任何帮助。我想我的问题有点不同。我在symfony4项目中使用FOSUser包。当我访问我的网站时,出现以下错误:

Argument 3 passed to FOS\UserBundle\Doctrine\UserManager::__construct() must be an instance of Doctrine\Common\Persistence\ObjectManager, instance of ContainerVxxTSSB\EntityManager_9a5be93 given, called in C:\Users\xxx\Documents\Dev\project\var\cache\dev\ContainerVxxTSSB\srcApp_KernelDevDebugContainer.php on line 1885
TypeError {#742
  #message: "Argument 3 passed to FOS\UserBundle\Doctrine\UserManager::__construct() must be an instance of Doctrine\Common\Persistence\ObjectManager, instance of ContainerXNABQPE\EntityManager_9a5be93 given, called in C:\Users\xxx\Documents\Dev\test\var\cache\dev\ContainerXNABQPE\srcApp_KernelDevDebugContainer.php on line 1416"
  #code: 0
  #file: "C:\Users\xxx\Documents\Dev\test\vendor\friendsofsymfony\user-bundle\Doctrine\UserManager.php"
  #line: 41
  trace: {
    C:\Users\xxx\Documents\Dev\test\vendor\friendsofsymfony\user-bundle\Doctrine\UserManager.php:41 { …}
    C:\Users\xxx\Documents\Dev\test\var\cache\dev\ContainerXNABQPE\srcApp_KernelDevDebugContainer.php:1416 {
      ContainerXNABQPE\srcApp_KernelDevDebugContainer->getFosUser_UserManagerService()
      ›
      ›     return $this->services['fos_user.user_manager'] = new \FOS\UserBundle\Doctrine\UserManager(($this->privates['fos_user.util.password_updater'] ?? $this->getFosUser_Util_PasswordUpdaterService()), ($this->privates['fos_use
r.util.canonical_fields_updater'] ?? $this->getFosUser_Util_CanonicalFieldsUpdaterService()), ($this->services['doctrine'] ?? $this->getDoctrineService())->getManager(NULL), 'App\\Entity\\User');
      › }
      arguments: {
        $passwordUpdater: FOS\UserBundle\Util\PasswordUpdater {#739 …}
        $canonicalFieldsUpdater: FOS\UserBundle\Util\CanonicalFieldsUpdater {#741 …}
        $om: ContainerXNABQPE\EntityManager_9a5be93 {#647 …}
        $class: "App\Entity\User"
      }
    }
    C:\Users\xxx\Documents\Dev\test\var\cache\dev\ContainerXNABQPE\srcApp_KernelDevDebugContainer.php:4625 { …}
    C:\Users\xxx\Documents\Dev\test\var\cache\dev\ContainerXNABQPE\srcApp_KernelDevDebugContainer.php:4388 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\dependency-injection\Container.php:450 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\dependency-injection\Argument\ServiceLocator.php:40 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\CommandLoader\ContainerCommandLoader.php:45 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:548 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:750 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\framework-bundle\Console\Application.php:143 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:561 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:587 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:657 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\framework-bundle\Console\Application.php:117 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:237 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\framework-bundle\Console\Application.php:83 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:149 { …}
    C:\Users\xxx\Documents\Dev\test\bin\console:42 { …}
  }
}
我不知道错误来自哪里,因为它表明缓存中有一个文件。我尝试删除var文件夹,但仍然出现相同的错误。我不明白的是,错误表明我给出了一个“ContainerVxxTSSB\EntityManager9A5BE93”的实例,但我不知道这怎么可能。 我甚至不知道在哪里搜索来解决这个问题

服务.亚马尔

  user_factory:
        class: App\Security\UserFactory
        arguments: ["@fos_user.user_manager", "@doctrine.orm.entity_manager", "%kernel.logs_dir%"]
UserFactory.php:

use App\Entity\User;
use FOS\UserBundle\Doctrine\UserManager;
use Hslavich\OneloginSamlBundle\Security\Authentication\Token\SamlTokenInterface;
use Hslavich\OneloginSamlBundle\Security\User\SamlUserFactoryInterface;



class UserFactory implements SamlUserFactoryInterface
{
    private $userManager;
    private $entityManager;
    private $logs_dir;

    public function __construct(UserManager $userManager, $entityManager, $logs_dir)
    {
        $this->userManager = $userManager;
        $this->entityManager = $entityManager;
        $this->logs_dir = $logs_dir;
    }
然后在供应商文件夹的UserManager.php中:

/**
     * Constructor.
     *
     * @param PasswordUpdaterInterface $passwordUpdater
     * @param CanonicalFieldsUpdater   $canonicalFieldsUpdater
     * @param ObjectManager            $om
     * @param string                   $class
     */
    public function __construct(PasswordUpdaterInterface $passwordUpdater, CanonicalFieldsUpdater $canonicalFieldsUpdater, ObjectManager $om, $class)
    {
        parent::__construct($passwordUpdater, $canonicalFieldsUpdater);

        $this->objectManager = $om;
        $this->class = $class;
    }
编辑: composer.json中的条令信息

"doctrine/annotations": "^1.0",
        "doctrine/doctrine-bundle": "^2.2",
        "doctrine/doctrine-migrations-bundle": "^3.0",
        "doctrine/orm": "^2.8",
错误指示的行:

 return $this->services['fos_user.user_manager'] = new \FOS\UserBundle\Doctrine\UserManager(($this->privates['fos_user.util.password_updater'] ?? $this->getFosUser_Util_PasswordUpdaterService()), ($this->privates['fos_user.util.canonical_fields_updater'] ?? $this->getFosUser_Util_CanonicalFieldsUpdaterService()), ($this->services['doctrine'] ?? $this->getDoctrineService())->getManager(NULL), 'App\\Entity\\User'); 
要创建项目,我执行了以下操作:

composer create-project symfony/website-skeleton:"^4.4" project_name
然后添加包

composer require friendsofsymfony/user-bundle
我不记得有什么错误

编辑2: 当我要使用此命令清除缓存时:

php bin/console clear:cache
我得到这个错误:

Argument 3 passed to FOS\UserBundle\Doctrine\UserManager::__construct() must be an instance of Doctrine\Common\Persistence\ObjectManager, instance of ContainerVxxTSSB\EntityManager_9a5be93 given, called in C:\Users\xxx\Documents\Dev\project\var\cache\dev\ContainerVxxTSSB\srcApp_KernelDevDebugContainer.php on line 1885
TypeError {#742
  #message: "Argument 3 passed to FOS\UserBundle\Doctrine\UserManager::__construct() must be an instance of Doctrine\Common\Persistence\ObjectManager, instance of ContainerXNABQPE\EntityManager_9a5be93 given, called in C:\Users\xxx\Documents\Dev\test\var\cache\dev\ContainerXNABQPE\srcApp_KernelDevDebugContainer.php on line 1416"
  #code: 0
  #file: "C:\Users\xxx\Documents\Dev\test\vendor\friendsofsymfony\user-bundle\Doctrine\UserManager.php"
  #line: 41
  trace: {
    C:\Users\xxx\Documents\Dev\test\vendor\friendsofsymfony\user-bundle\Doctrine\UserManager.php:41 { …}
    C:\Users\xxx\Documents\Dev\test\var\cache\dev\ContainerXNABQPE\srcApp_KernelDevDebugContainer.php:1416 {
      ContainerXNABQPE\srcApp_KernelDevDebugContainer->getFosUser_UserManagerService()
      ›
      ›     return $this->services['fos_user.user_manager'] = new \FOS\UserBundle\Doctrine\UserManager(($this->privates['fos_user.util.password_updater'] ?? $this->getFosUser_Util_PasswordUpdaterService()), ($this->privates['fos_use
r.util.canonical_fields_updater'] ?? $this->getFosUser_Util_CanonicalFieldsUpdaterService()), ($this->services['doctrine'] ?? $this->getDoctrineService())->getManager(NULL), 'App\\Entity\\User');
      › }
      arguments: {
        $passwordUpdater: FOS\UserBundle\Util\PasswordUpdater {#739 …}
        $canonicalFieldsUpdater: FOS\UserBundle\Util\CanonicalFieldsUpdater {#741 …}
        $om: ContainerXNABQPE\EntityManager_9a5be93 {#647 …}
        $class: "App\Entity\User"
      }
    }
    C:\Users\xxx\Documents\Dev\test\var\cache\dev\ContainerXNABQPE\srcApp_KernelDevDebugContainer.php:4625 { …}
    C:\Users\xxx\Documents\Dev\test\var\cache\dev\ContainerXNABQPE\srcApp_KernelDevDebugContainer.php:4388 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\dependency-injection\Container.php:450 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\dependency-injection\Argument\ServiceLocator.php:40 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\CommandLoader\ContainerCommandLoader.php:45 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:548 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:750 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\framework-bundle\Console\Application.php:143 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:561 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:587 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:657 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\framework-bundle\Console\Application.php:117 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:237 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\framework-bundle\Console\Application.php:83 { …}
    C:\Users\xxx\Documents\Dev\test\vendor\symfony\console\Application.php:149 { …}
    C:\Users\xxx\Documents\Dev\test\bin\console:42 { …}
  }
}

你能试一下吗

use App\Entity\User;
use FOS\UserBundle\Doctrine\UserManager;
use Hslavich\OneloginSamlBundle\Security\Authentication\Token\SamlTokenInterface;
use Hslavich\OneloginSamlBundle\Security\User\SamlUserFactoryInterface;



class UserFactory implements SamlUserFactoryInterface
{
    private $userManager;
    private $entityManager;
    private $logs_dir;

    public function __construct(UserManager $userManager, Doctrine\Common\Persistence\ObjectManager $entityManager, $logs_dir)
    {
        $this->userManager = $userManager;
        $this->entityManager = $entityManager;
        $this->logs_dir = $logs_dir;
    }

很抱歉回复太晚,我不确定您是否仍然需要帮助,但这应该会帮助您。FOSUserBundle显然已经被推到了生命的尽头,因为在reposity上没有任何活动。从长远来看,远离它是明智的。但是,您仍然可以让它工作

您需要将您的
条令/orm
依赖版本从
^2.8
降级为
2.7


任何高于
2.8
的内容都需要
原则/common
版本
^3.0
,这将导致您面临的问题。

我尝试过,没有任何改变。但是原则\Common\Persistence\ObjectManager加了下划线,它说“未定义的名称空间持久性”。好吧,只放
ObjectManager
,让IDE自动完成名称空间,他们也尝试
EntityManagerInterface
,因为typehintI尝试了这两种方法,但都不起作用:/包括清除缓存,对吗?有趣。通常这是一个“清除缓存”类型的问题,但您已经尝试过了。您可以尝试查看第1885行的srcApp_KernelDevDebugContainer.php。它基本上是创建UserFactory的地方,但我认为它不会有多大帮助。你以前在4.0下工作过吗?我之所以这样问,是因为FOSUserBundle并不总是像它应该的那样得到维护。可以尝试创建一个新的4.4项目,安装FOSUserBundle,然后比较版本以查看是否存在某种不匹配。错误行为“return$this->services['fos\u user.user\u manager']=new\fos\UserBundle\doctor\UserManager($this->privates['fos\u user.util.password\u updater']?$this->getFosUser\u Util\u PasswordUpdaterService(),($this->privates['fos\u user.Util.canonical\u fields\u updater']?$this->getFosUser\u Util\u CanonicalFieldsUpdaterService(),($this->services['doctor']?$this->getDoctrineService())->getManager(NULL),'App\\Entity\\user');”。这是一个新项目,与SefFoIM 4.4,这是一个新的项目从昨天,我得到了这个阿罗立即。考虑更新您的问题与上述代码。评论的格式不好。虽然它似乎没有提到任何地方的记录器目录。是的,对不起,这是一个更次要的要求。我使用了“作曲家新-完整版本= LTS ProjixNeX”,接着是“作曲家需要FuelfSufFiffy/Upple Bead”,作曲家抱怨Tigg版本。考虑用你用来创建新项目的命令更新你的问题并安装用户包。