传递给DoctrineDataCollector :: __ construct()的参数1必须是Doctrine\Common\Persistence\ManagerRegistry的实例 [英] Argument 1 passed to DoctrineDataCollector::__construct() must be an instance of Doctrine\Common\Persistence\ManagerRegistry

查看:82
本文介绍了传递给DoctrineDataCollector :: __ construct()的参数1必须是Doctrine\Common\Persistence\ManagerRegistry的实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个Symfony项目,该项目是其他人开始的,我很高兴自己能够启动并运行它。不幸的是,今天运行 composer update 后,我的Symfony页面引发了错误。


运行composer更新后,显示了以下错误:


作曲家更新错误



 执行脚本缓存:clear [KO] 
[KO]
脚本缓存:clear返回,错误代码为255
! Symfony\组件\ErrorHandler\Error\ClassNotFoundError {#132
!! #message:
!!尝试加载类 MappingDriverChain来自名称空间 Doctrine\Common\Persistence\Mapping\Driver 。\n
!您忘记了使用功能吗? Doctrine\Persistence\Mapping\Driver\MappingDriverChain的声明?
!!
!! #code:0
!! #file: ./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php
!! #line:869
!!跟踪:{
!! ./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php:869 {
!!容器FCUQG2T\App_KernelDevDebugContainer-> getDoctrine_Orm_DefaultEntityManagerService($ lazyLoad = true)
!! ›
!! › $ b =新的\Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain();
!! › $ b-> addDriver(new \Doctrine\ORM\Mapping\Driver\AnnotationDriver(($ this-> privates ['annotations.cached_reader'] ?? ,[0 =>(\dirname(__ DIR__,4)。'/ src / Entity')]),'App\\Entity');
!! }
! ./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php:5160 {…}
! ./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php:5204 {…}
! ./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php:569 {…}
! ./vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php:87 {…}
! ./vendor/symfony/http-kernel/Kernel.php:553 {…}
! ./vendor/symfony/http-kernel/Kernel.php:126 {…}
! ./vendor/symfony/framework-bundle/Console/Application.php:168 {…}
! ./vendor/symfony/framework-bundle/Console/Application.php:74 {…}
! ./vendor/symfony/console/Application.php:140 {…}
! ./bin/console:42 {…}
!! }
! }
! 2020-07-31T08:18:05 + 00:00 [紧急]未捕获的错误:未找到类'Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain'

访问Symfony页面后,打印出此TypeError:


TypeError


传递给Doctrine\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector :: __ construct()的参数1必须是Doctrine\Common\Persistence\ManagerRegistry,给定的Doctrine\Bundle\DoctrineBundle\Registry的实例,在/var/www/html/mgo/var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php中调用


老实说,我不知道是什么引起了这个问题,但我认为这与我在<$ c $中所做的更改无关c> twig 和Symfony php 文件。


我会添加一些文件,如果


/config/packages/doctrine.yaml



 原则:
dbal:
网址:'%env(resolve:DATABASE_URL)%'

#重要:您必须配置服务器版本
#在此处或在DATABASE_URL env var中(请参阅.env文件)
#server_version:'5.7'
orm:
auto_generate_proxy_classes:true
naming_strategy:doctrine.orm.naming_strategy.underscore_number_aware
auto_mapping:true
映射:
App:
is_bundle:false
类型:注释
dir:'%kernel.project_dir%/ src / Entity'
前缀:'App\Entity'
别名:App



composer.json



  {
名称: project,
description: project description,
type: path,
; license: MIT,
minimum-stability: dev,
require:{
php: ^ 7.4,
ext-ctype: *,
ext-iconv: *,
mgo / mgo-client-php: 2.0.0,
sensio / framework-extra-bundle: ^ 5.1,
symfony / asset : 5.0。*,
symfony /控制台: 5.0。*,
symfony / dotenv: 5.0。*,
symfony / expression-language: 5.0。*,
symfony / flex: ^ 1.3.1,
symfony / form: 5.0。*,
symfony /框架捆绑: 5.0。*,
symfony / http-client: 5.0。*,
symfony / intl: 5.0。*,
symfony / mailer: 5.0。*,
symfony / monolog-bundle: ; ^ 3.1,
symfony / notifier: 5.0。*,
symfony / orm-pack& : *,
symfony / process: 5.0。*,
symfony / security-bundle: 5.0。*,
symfony / serializer-pack: *,
symfony / string: 5.0。*,
symfony / translation: 5.0。*,
symfony / twig-pack: *,
symfony / validator: 5.0。*,
symfony / web-link: 5.0。*,
symfony / yaml: 5.0。*,
ext-json: *
},
存储库:[
{
type: path,
url: / home / *用户* / mgo-client-php,
符号链接:false
}
],
require-dev:{
symfony /debug-pack:*、
symfony/maker-bundle:^1.0、
symfony/profiler-pack:* ,
symfony / test-pack: *,
mgo-client-php: 2.0.0&,
monolog / monolog, : ^ 1.23;
},
config:{
preferred-install:{
*: dist
},
sort-packages:真
},
autoload:{
psr-4:{
App\\: src /
}
},
autoload-dev:{
psr-4:{
App\\Tests\\ \: tests /
}
},
替换:{
paragonie / random_compat: 2. *,
symfony / polyfill- ctype: *,
symfony / polyfill-iconv: *,
symfony / polyfill-php72: *,
symfony / polyfill-php71: *,
symfony / polyfill-php70: *,
symfony / polyfill-php56: *"
},
脚本:{
自动脚本:{
cache:clear: symfony-cmd,
" assets:install%PUBLIC_DIR%" ;:" symfony-cmd"
},
post-install-cmd:[
@ auto-scripts
],
post-update-cmd:[
@ auto-scripts
]
},
conflict:{
symfony / symfony: *
},
extra:{
symfony:{
allow-contrib:false,
require: 5.0。*
}
}
}

编辑:


按照@Alexandre Tranchant的建议,我删除了 / var / cache 文件以获取原始错误。弹出的错误如下:


试图加载类 MappingDriverChain。来自名称空间 Doctrine\Common\Persistence\Mapping\Driver。
您忘记了使用吗?语句 Doctrine\Persistence\Mapping\Driver\MappingDriverChain?



  • 更新存储库声明(见下文)

  • 更新灯具文件。 (但是我看不到您的作曲家文件中的装置)

  • 因此,我想您必须升级存储库声明。


    这是存储库的新模式

     #src / Repository / Foo.php 
    使用App\实体\
    使用Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
    使用Doctrine\ORM\NonUniqueResultException;
    使用Doctrine\Persistence\ManagerRegistry;


    / **
    *一些以新方式编码的存储库。
    *
    * @方法文章|为空find($ id,$ lockMode = null,$ lockVersion = null)
    * @方法文章|为空findOneBy(数组$ criteria,数组$ orderBy = null)
    * @method Article [] findAll()
    * @method Article [] findBy(array $ criteria,array $ orderBy = null,$ limit = null,$ offset = null)
    * /
    类ArticleRepository扩展了ServiceEntityRepository
    {
    / **
    * FooRepository构造函数。
    *
    * @param ManagerRegistry $ registry通过依赖注入注入
    * /
    公共功能__construct(ManagerRegistry $ registry)
    {
    parent :: __ construct ($ registry,Foo :: class);
    }

    如果不使用存储库,则必须在代码中查找使用 Doctrine\Bundle\DoctrineBundle\Registry ,并找到一种用新的 ManagerRegistry 替换它的方法。


    I am developing a Symfony project which somebody else started on and I was happy that I had it up and running. Unfortunatelly after running composer update today, the Symfony page that I have throws an error.

    After running composer update the following error was displayed:

    Composer update error

    Executing script cache:clear [KO]
     [KO]
    Script cache:clear returned with error code 255
    !!  Symfony\Component\ErrorHandler\Error\ClassNotFoundError {#132
    !!    #message: """
    !!      Attempted to load class "MappingDriverChain" from namespace "Doctrine\Common\Persistence\Mapping\Driver".\n
    !!      Did you forget a "use" statement for "Doctrine\Persistence\Mapping\Driver\MappingDriverChain"?
    !!      """
    !!    #code: 0
    !!    #file: "./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php"
    !!    #line: 869
    !!    trace: {
    !!      ./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php:869 {
    !!        ContainerFcUQG2T\App_KernelDevDebugContainer->getDoctrine_Orm_DefaultEntityManagerService($lazyLoad = true)
    !!        ›
    !!        › $b = new \Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain();
    !!        › $b->addDriver(new \Doctrine\ORM\Mapping\Driver\AnnotationDriver(($this->privates['annotations.cached_reader'] ?? $this->getAnnotations_CachedReaderService()), [0 => (\dirname(__DIR__, 4).'/src/Entity')]), 'App\\Entity');
    !!      }
    !!      ./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php:5160 { …}
    !!      ./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php:5204 { …}
    !!      ./var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php:569 { …}
    !!      ./vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php:87 { …}
    !!      ./vendor/symfony/http-kernel/Kernel.php:553 { …}
    !!      ./vendor/symfony/http-kernel/Kernel.php:126 { …}
    !!      ./vendor/symfony/framework-bundle/Console/Application.php:168 { …}
    !!      ./vendor/symfony/framework-bundle/Console/Application.php:74 { …}
    !!      ./vendor/symfony/console/Application.php:140 { …}
    !!      ./bin/console:42 { …}
    !!    }
    !!  }
    !!  2020-07-31T08:18:05+00:00 [critical] Uncaught Error: Class 'Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain' not found
    !!
    

    After accessing the Symfony page, this TypeError was printed:

    TypeError

    Argument 1 passed to Doctrine\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector::__construct() must be an instance of Doctrine\Common\Persistence\ManagerRegistry, instance of Doctrine\Bundle\DoctrineBundle\Registry given, called in /var/www/html/mgo/var/cache/dev/ContainerFcUQG2T/App_KernelDevDebugContainer.php on line 1176

    To be honest I have no idea what caused this issue, but I think it has nothing to do with the changes I made in the twig and Symfony php files of the project.

    I'll add some files, if there is anything else that I should be looking into, let me know.

    /config/packages/doctrine.yaml

    doctrine:
        dbal:
            url: '%env(resolve:DATABASE_URL)%'
    
            # IMPORTANT: You MUST configure your server version,
            # either here or in the DATABASE_URL env var (see .env file)
            #server_version: '5.7'
        orm:
            auto_generate_proxy_classes: true
            naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
            auto_mapping: true
            mappings:
                App:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity'
                    prefix: 'App\Entity'
                    alias: App
    

    composer.json

    {
      "name": "project",
      "description": "project description",
      "type": "path",
      "license": "MIT",
      "minimum-stability": "dev",
      "require": {
        "php": "^7.4",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "mgo/mgo-client-php": "2.0.0",
        "sensio/framework-extra-bundle": "^5.1",
        "symfony/asset": "5.0.*",
        "symfony/console": "5.0.*",
        "symfony/dotenv": "5.0.*",
        "symfony/expression-language": "5.0.*",
        "symfony/flex": "^1.3.1",
        "symfony/form": "5.0.*",
        "symfony/framework-bundle": "5.0.*",
        "symfony/http-client": "5.0.*",
        "symfony/intl": "5.0.*",
        "symfony/mailer": "5.0.*",
        "symfony/monolog-bundle": "^3.1",
        "symfony/notifier": "5.0.*",
        "symfony/orm-pack": "*",
        "symfony/process": "5.0.*",
        "symfony/security-bundle": "5.0.*",
        "symfony/serializer-pack": "*",
        "symfony/string": "5.0.*",
        "symfony/translation": "5.0.*",
        "symfony/twig-pack": "*",
        "symfony/validator": "5.0.*",
        "symfony/web-link": "5.0.*",
        "symfony/yaml": "5.0.*",
        "ext-json": "*"
      },
      "repositories": [
          {
          "type": "path",
          "url": "/home/*user*/mgo-client-php",
          "symlink": false
      }
      ],
      "require-dev": {
          "symfony/debug-pack": "*",
          "symfony/maker-bundle": "^1.0",
          "symfony/profiler-pack": "*",
          "symfony/test-pack": "*",
          "mgo-client-php": "2.0.0",
          "monolog/monolog": "^1.23"
      },
      "config": {
          "preferred-install": {
              "*": "dist"
          },
          "sort-packages": true
      },
      "autoload": {
          "psr-4": {
              "App\\": "src/"
          }
      },
      "autoload-dev": {
          "psr-4": {
              "App\\Tests\\": "tests/"
          }
      },
      "replace": {
          "paragonie/random_compat": "2.*",
          "symfony/polyfill-ctype": "*",
          "symfony/polyfill-iconv": "*",
          "symfony/polyfill-php72": "*",
          "symfony/polyfill-php71": "*",
          "symfony/polyfill-php70": "*",
          "symfony/polyfill-php56": "*"
      },
      "scripts": {
          "auto-scripts": {
              "cache:clear": "symfony-cmd",
              "assets:install %PUBLIC_DIR%": "symfony-cmd"
          },
          "post-install-cmd": [
              "@auto-scripts"
          ],
          "post-update-cmd": [
              "@auto-scripts"
          ]
      },
      "conflict": {
          "symfony/symfony": "*"
      },
      "extra": {
          "symfony": {
              "allow-contrib": false,
              "require": "5.0.*"
          }
      }
    }
    

    EDIT:

    As @Alexandre Tranchant suggested I removed my /var/cache file to get the original error. The error that pops up is the following:

    Attempted to load class "MappingDriverChain" from namespace "Doctrine\Common\Persistence\Mapping\Driver". Did you forget a "use" statement for "Doctrine\Persistence\Mapping\Driver\MappingDriverChain"?

    解决方案

    It's correct there is no link with your update on twig files.

    As your composer.json file doesn't fix the doctrine version, it upgraded your doctrine package version. In the newest version of Doctrine, the pattern of repository files have change. There is 2 solutions:

    Solution1 (Not tested and not recommended): you fix the doctrine package by adding it in the composer.json. You can have a look on the old composer.lock of your application. This isn't the best solution. (But it's only my opinion)

    Solution2: Upgrade your files to be compliant with the new version of doctrine.

    I see three major steps:

    1. Update the configuration file by updating recipes.
    2. Update the declaration of repositories (see below)
    3. Update fixtures files. (but I don't see fixtures in your composer files)

    So, I guess that you have to upgrade your repositories declaration.

    Here is the new pattern of a repository

    #src/Repository/Foo.php
    use App\Entity\Foo;
    use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
    use Doctrine\ORM\NonUniqueResultException;
    use Doctrine\Persistence\ManagerRegistry;
    
    
    /**
     * Some repository coded in the new way.
     *
     * @method Article|null find($id, $lockMode = null, $lockVersion = null)
     * @method Article|null findOneBy(array $criteria, array $orderBy = null)
     * @method Article[]    findAll()
     * @method Article[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
     */
    class ArticleRepository extends ServiceEntityRepository
    {
        /**
         * FooRepository constructor.
         *
         * @param ManagerRegistry $registry injected by dependency injection
         */
        public function __construct(ManagerRegistry $registry)
        {
            parent::__construct($registry, Foo::class);
        }
    

    If you don't use repositories, you have to find where in your code you was using Doctrine\Bundle\DoctrineBundle\Registry and find a way to replace it by the new ManagerRegistry.

    这篇关于传递给DoctrineDataCollector :: __ construct()的参数1必须是Doctrine\Common\Persistence\ManagerRegistry的实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆