FOSUserBundle安装上的Symfony 4.4错误

FOSUserBundle安装上的Symfony 4.4错误,symfony,fosuserbundle,symfony-4.4,Symfony,Fosuserbundle,Symfony 4.4,我跟随这篇关于“如何在symfony 4.4中安装fosuserbundle”的两篇文章: 但最后我犯了一个错误: 传递给FOS\UserBundle\Doctrine\UserManager的参数3::\uu construct()必须是Doctrine\Common\Persistence\ObjectManager的实例,Doctrine\ORM\EntityManager的实例 给定,在第1466行的/url/to/symfony/proyect/var/cache/dev/Cont

我跟随这篇关于“如何在symfony 4.4中安装fosuserbundle”的两篇文章:

但最后我犯了一个错误:

传递给FOS\UserBundle\Doctrine\UserManager的参数3::\uu construct()必须是Doctrine\Common\Persistence\ObjectManager的实例,Doctrine\ORM\EntityManager的实例 给定,在第1466行的/url/to/symfony/proyect/var/cache/dev/ContainerKx7xY28/srcApp_KernelDevDebugContainer.php中调用

我没有对FOSUserBundle做任何更改,但我的配置似乎有问题

我的配置文件如下所示:

安全.yaml

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        #users_in_memory: { memory: null }
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            #anonymous: lazy
            #provider: users_in_memory
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager

            logout:       true
            anonymous:    true

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }
软件包/fos_user.yaml

# config/packages/fos_user.yaml
fos_user:
    db_driver: orm # other valid values are 'mongodb' and 'couchdb'
    firewall_name: main
    user_class: App\Entity\User
    from_email:
        address: "email@email.com"
        sender_name: "email@email.com"
src/Entity/User.php

<?php
// src/Entity/User.php

namespace App\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

这不是fos用户包的问题,而是您的用户声明的问题

阅读

请参阅您的用户声明:

<?php
// src/Entity/User.php

namespace App\Entity;

use Doctrine\Common\Persistence\ObjectManager; <---
编辑

好的,我一直在寻找它,这看起来像是一个有条理的错误。 我发现这个问题:

它能解决你的问题

只需更新composer.json,如下所示:

...
"require": {
        "php": ">=7.1.3",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "composer/package-versions-deprecated": "^1.11",
        "doctrine/annotations": "^1.0",
        "doctrine/doctrine-bundle": "^2.1",
        "doctrine/doctrine-migrations-bundle": "^3.0",
        "doctrine/orm": "^2.7",
        "doctrine/common":"^2.13", <------
...
。。。
“要求”:{
“php”:“>=7.1.3”,
“ext ctype”:“*”,
“外部iconv”:“*”,
“已弃用编写器/程序包版本”:“^1.11”,
“条令/注释”:“^1.0”,
“条令/条令包”:“^2.1”,
“条令/条令迁移包”:“^3.0”,
“条令/orm”:“^2.7”,

“doctrine/common”:“^2.13”,我在互联网上找到了很多最佳解决方案,但没有一个解决了我的问题,所以我看到了使用捆绑包的服务,看到了
fos\u user.user\u manager.default
:服务是调用
doctrine\Modle\UserManager
的服务,所以我用自己的类重写了它

fos_user.user_manager.default:
        class: App\Model\UserManager
        arguments:
            - '@fos_user.util.password_updater'
            - '@fos_user.util.canonical_fields_updater'
            - '@doctrine.orm.entity_manager'
            - '%fos_user.model.user.class%'
  • 创建自己的类来管理
    fosUser
    实体,它必须扩展
    FOS\UserBundle\Model\UserManager
    (可以复制同一类的代码)
  • 重写服务注入相同的参数,除了第三个参数外,它将被替换为
    EntityManagerInterface

  • 我希望这会对你有所帮助,它对我很有用。

    嗨!对不起,我忘了删除这行!它没用(在原始帖子中编辑)我在一个新项目中做了所有的工作,所以我在任何地方都没有使用EntityManager,我在symfony 4.4中仍然会遇到相同的错误,但是当我在4.3中尝试使用相同的配置和相同的实体时,我没有出现错误。如果你想查看该项目,只需检查它:好的,symfony 4.3不再是维护的,所以你不应该使用它。所以你想使用symfony 4.4和这是正确的,因为它是一个长期版本。但我可以问一下,为什么不使用新版本的Symfony(如5.1)创建它?Thx 4所有,它解决了问题!!!!!顺便说一句,我使用的是4.4,因为它是当前的lts!当5.x获得lts时,我将升级该项目。请分享更多详细信息,如您使用的确切软件包版本,特别是从
    原则/*
    ,对于使用Symfony 4.3的版本和使用Symfony 4.4的非工作示例。这是uld有助于发现不兼容
    ...
    "require": {
            "php": ">=7.1.3",
            "ext-ctype": "*",
            "ext-iconv": "*",
            "composer/package-versions-deprecated": "^1.11",
            "doctrine/annotations": "^1.0",
            "doctrine/doctrine-bundle": "^2.1",
            "doctrine/doctrine-migrations-bundle": "^3.0",
            "doctrine/orm": "^2.7",
            "doctrine/common":"^2.13", <------
    ...
    
    fos_user.user_manager.default:
            class: App\Model\UserManager
            arguments:
                - '@fos_user.util.password_updater'
                - '@fos_user.util.canonical_fields_updater'
                - '@doctrine.orm.entity_manager'
                - '%fos_user.model.user.class%'