【发布时间】: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-bundle 和 ramsey/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