安装symfony项目时,出现“类Doctrine\Common\Cache\ArrayCache不存在”

b09cbbtk  于 2022-12-13  发布在  其他
关注(0)|答案(4)|浏览(182)

我尝试按照以下步骤部署symfony项目:

./composer.phar update
php bin/console cache:clear

我也尝试过手动安装运行ArrayCache的教义驱动程序:

./composer.phar require doctrine/cache

结果总是相同的,我以以下错误结束:

# ./composer.phar update --no-interaction
[...]
Script cache:clear returned with error code 255
!!
!!  In ContainerBuilder.php line 1089:
!!
!!    Class Doctrine\Common\Cache\ArrayCache does not exist
!!
!!
!!
Script @auto-scripts was called via post-update-cmd

我是symfony的新手,我不明白为什么这门课不见了。
我正在使用以下版本:

"symfony/framework-bundle": "5.1.*",
"doctrine/doctrine-bundle": "^2.2",

提前感谢您的帮助。

mkh04yzy

mkh04yzy1#

我想你在安装"doctrine/doctrine-bundle": "^2.2",的时候安装了doctrine/cache 2.x版本。
github page开始:
This library is deprecated and will no longer receive bug fixes from the Doctrine Project. Please use a different cache library, preferably PSR-6 or PSR-16 instead.
因此,您有以下选项:

  • ./composer.phar要求的教义/缓存:^1.11
  • 使用其他库进行缓存,例如symfony/cache
nbysray5

nbysray52#

过了一些时候,我发现了一个更好的解决办法:

composer require symfony/cache

然后在PHP:

$config = new Configuration;
$queryCache = new PhpFilesAdapter('doctrine_queries'); $config->setQueryCache($queryCache);    
$resultCache = new PhpFilesAdapter('doctrine_results', 0, $settings['cache_dir']); $config->setResultCache($resultCache);
$metaCache = new PhpFilesAdapter('doctrine_metadata', 0, $settings['cache_dir']); $config->setMetadataCache($metaCache);

我现在可以把条令升级到最新版本了。
这是另一个答案,但是由于文档太差(对于非Symfony用户),添加几行php可以使所有的区别!希望这能帮助一些人。如果由于某种原因这不是最好的解决方案,我很想听到。
对我来说,解决办法是降级到教义2.7.4。
Google已经在搜索了,很明显Doctrine的文档还没有整理好。我会在我的待办事项列表中寻找另一个(第三方)缓存解决方案来代替ArrayCache。我应该早点这样做,因为ArrayCache不适合生产。希望Doctrine能尽快更新文档!
如果我找到一个替代品,我会把它贴在这里。或者也许有人比我早一步,我希望如此!

sulc1iza

sulc1iza3#

我认为在其他答案中已经确定,在某个地方,您正在示例化来自doctrine/cache包的ArrayCache的示例。
如果你想要doctrine/cache2.x(其中ArrayCache已经被删除)的等效功能,你可以做doctrine/dbal本身会做的事情。
也就是说,与其这样...

$cache = new \Doctrine\Common\Cache\ArrayCache();

...您也可以这样做(假设您对symfony/cache包的介绍感到满意)...

$cache = \Doctrine\Common\Cache\Psr6\DoctrineProvider::wrap(
    new \Symfony\Component\Cache\Adapter\ArrayAdapter()
)

ArrayCache不存在并且您没有在dev-mode中指定缓存时,Doctrine本身就是这样做的。您可以看到Doctrine决定在\Doctrine\ORM\Tools\Setup::createCacheInstance示例化缓存的逻辑。

  • (注意:即使你没有指定缓存,Doctrine也会自动示例化一个缓存--它可能在你没有意识到的情况下在Redis中存储值😲)*
hfyxw5xn

hfyxw5xn4#

为了解决这个问题,我首先删除composer.lock文件,之后,我使用以下命令安装composer:composer install我使用以下命令安装了symfony缓存依赖项:编写器需要symfony/缓存

  • 〉https://packagist.org/packages/symfony/cache

相关问题