【问题标题】:Doctrine\Common\Persistence\Mapping\Driver is missingDoctrine\Common\Persistence\Mapping\Driver 丢失
【发布时间】:2020-11-14 06:39:23
【问题描述】:

抱歉,今天我在 Symfony 上发生了一些奇怪的事情。 我正在和一个朋友开发一个 web 应用程序,并决定今天早上运行一个作曲家更新。 之前一切正常,但是一旦作曲家更新完成,我得到一个缓存:清除错误。这是关于如何在多个存储库中找不到 Doctrine\Common\Persistence\ManagerRegistry;,所以我尝试使用可以解析为 Doctrine\Persistence\ManagerRegistry 的 PhpStorm 自动完成。 问题是,一旦我更正了所有存储库上的错误,我在尝试运行 php bin/console 时遇到了以下错误:

Symfony\Component\ErrorHandler\Error\ClassNotFoundError^ {#4524
  #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/ContainerO7VJLRg/App_KernelDevDebugContainer.php"
  #line: 1223
  trace: {
    ./var/cache/dev/ContainerO7VJLRg/App_KernelDevDebugContainer.php:1223 {
      ContainerO7VJLRg\App_KernelDevDebugContainer->getDoctrine_Orm_DefaultEntityManagerService($lazyLoad = true)^
      › 
      › $b = new \Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain();
      › 
    }
    ./var/cache/dev/ContainerO7VJLRg/App_KernelDevDebugContainer.php:6427 { …}
    ./var/cache/dev/ContainerO7VJLRg/App_KernelDevDebugContainer.php:6472 { …}
    ./var/cache/dev/ContainerO7VJLRg/App_KernelDevDebugContainer.php:899 { …}
    ./vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php:90 { …}
    ./vendor/symfony/http-kernel/Kernel.php:572 { …}
    ./vendor/symfony/http-kernel/Kernel.php:131 { …}
    ./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 { …}
  }
}

我与没有同样问题的同事分享了它。他运行作曲家更新,并没有任何问题。所以我决定将我的更改推送到不同的存储库,然后克隆项目并重试。 和以前一样的错误。

之后,我决定从头开始创建一个新的 symfony 网站并将文件移过来(在拉取他的更改之后),(configs/src/templates/public 等)它就像一个魅力,bin/console 完美运行, symfony server:start 提供的页面也很好,所以我们决定,很酷,让我们把它移到我们的共享存储库中,他会尝试克隆它并运行 composer install。

只要他这样做,他就会得到与我完全相同的错误。

我尝试将项目克隆到另一个文件夹,结果完全一样。

顺便说一句,尽管缓存清除不起作用,但我们每一步都在清除缓存文件夹。

我认为这与将 symfony/orm-pack 更新到 2.0.0 版有关,但我们将其降级并没有修复任何问题。

Symfony 版本(对我们俩来说)是 5.1 我们正在使用的其他库是:data-dog/audit-bundleramsey/uuid-doctrine 不确定这是否有帮助。

【问题讨论】:

  • 您尝试过什么调试问题?有问题的文件是否存在?
  • 我们尝试了什么: 1 - 创建一个新的 symfony 项目并手动移动文件,这在本地对问题进行了排序,但是当我们将这些推送到 git 并克隆项目时,只要我们点击作曲家安装或作曲家更新错误又回来了 2-我们在 windows 和 popOS 中尝试过,一旦执行作曲家更新或作曲家安装,就会发生同样的错误 3-我们试图降级 symfony/orm-pack 并且错误仍然存​​在 文件在问题不存在,但它没有被应用程序的代码使用,而是来自 App_KernelDevDebugContainer.php 上的 symfony 代码本身。
  • 如果文件存在,你有没有试过检查原因?它是doctrine/persistence 的一部分——安装了吗?另外,您能显示触发该错误的代码吗?据我所知,错误消息建议替换,所以也许您使用了错误的命名空间来加载它?
  • 我们没有加载它,symfony 是,正如你在上面发布的错误中看到的那样。 Doctrine 作为 symfony/orm-pack 的一部分被加载。我们不能更新 symfony 生成的缓存文件上的命名空间,可以吗(如果可以的话,我会马上尝试)?此外,如果错误出现在应用程序端,则在全新安装 Symfony 后网站将无法运行。我们认为 symfony 加载的库之间存在不匹配,只是不确定是哪个。知道构建 App_KernelDevDebugContainer 的库是什么吗?
  • 构建容器的是 Symfony 本身。因此,您应该开始定位错误本身,例如通过检查调用了哪个服务。在容器类中设置断点以查看会发生什么应该不会太难。

标签: php symfony doctrine composer-php symfony5


【解决方案1】:

很抱歉没有早点回复,但我们发现了错误。

这确实与教义的版本有关。在 git 上,我们在更新 composer json 时传递了旧的 composer.lock 文件,因此为什么在我们克隆它后错误又回来了。

基本上,尽管我们指定 orm-pack 的 2.0.0 版本,但是 composer.lock 始终将其限制为 1.8,并且命名空间和教义的文件夹结构在两个版本之间发生了变化。

一旦我们删除 composer.lock 并更新 composer 一切正常。

【讨论】:

    猜你喜欢
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2021-10-11
    • 1970-01-01
    • 2016-01-05
    • 2021-04-20
    • 2011-10-06
    相关资源
    最近更新 更多