symfony / recipes-contrib

Symfony Contrib Recipes Repositories

Home Page:https://github.com/symfony/recipes-contrib/blob/flex/main/RECIPES.md

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Fatal error for mongodb-odm-bundle on Symfony 6 (prod)

mklewitz opened this issue · comments

The recipe for mongodb-odm-bundle ( https://github.com/symfony/recipes-contrib/blob/master/doctrine/mongodb-odm-bundle/3.3/config/packages/prod/doctrine_mongodb.yaml ) refers to Symfony\Component\Cache\DoctrineProvider which isn't available in Symfony 6 anymore.

So setting up a minimal test case results in a fatal error in prod env (dev is working fine):

composer create-project symfony/skeleton mongodb-odm-bundle_test
cd mongodb-odm-bundle_test
composer config extra.symfony.allow-contrib true
composer require doctrine/mongodb-odm-bundle --with-all-dependencies
bin/console cache:clear --env=prod --no-debug

results in :

PHP Fatal error:  Uncaught Error: Class "Symfony\Component\Cache\DoctrineProvider" not found in /Users/mklewitz/dev/mongodb-odm-bundle_test/var/cache/prod/ContainerE7S12bi/getDoctrineMongodb_Odm_DefaultDocumentManagerService.php:26
Stack trace:
#0 /Users/mklewitz/dev/mongodb-odm-bundle_test/var/cache/prod/ContainerE7S12bi/App_KernelProdContainer.php(97): ContainerE7S12bi\getDoctrineMongodb_Odm_DefaultDocumentManagerService::do(Object(ContainerE7S12bi\App_KernelProdContainer), true)
#1 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/dependency-injection/Container.php(215): ContainerE7S12bi\App_KernelProdContainer->load('getDoctrineMong...')
#2 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/dependency-injection/Container.php(197): Symfony\Component\DependencyInjection\Container->make('doctrine_mongod...', 1)
#3 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/doctrine-bridge/ManagerRegistry.php(36): Symfony\Component\DependencyInjection\Container->get('doctrine_mongod...')
#4 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/doctrine/persistence/lib/Doctrine/Persistence/AbstractManagerRegistry.php(206): Symfony\Bridge\Doctrine\ManagerRegistry->getService('doctrine_mongod...')
#5 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/doctrine/mongodb-odm-bundle/CacheWarmer/HydratorCacheWarmer.php(74): Doctrine\Persistence\AbstractManagerRegistry->getManagers()
#6 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php(99): Doctrine\Bundle\MongoDBBundle\CacheWarmer\HydratorCacheWarmer->warmUp('/Users/mklewitz...')
#7 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/http-kernel/Kernel.php(579): Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate->warmUp('/Users/mklewitz...')
#8 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/http-kernel/Kernel.php(769): Symfony\Component\HttpKernel\Kernel->initializeContainer()
#9 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/http-kernel/Kernel.php(128): Symfony\Component\HttpKernel\Kernel->preBoot()
#10 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/framework-bundle/Console/Application.php(166): Symfony\Component\HttpKernel\Kernel->boot()
#11 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/framework-bundle/Console/Application.php(72): Symfony\Bundle\FrameworkBundle\Console\Application->registerCommands()
#12 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/console/Application.php(171): Symfony\Bundle\FrameworkBundle\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#13 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php(54): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#14 /Users/mklewitz/dev/mongodb-odm-bundle_test/vendor/autoload_runtime.php(29): Symfony\Component\Runtime\Runner\Symfony\ConsoleApplicationRunner->run()
#15 /Users/mklewitz/dev/mongodb-odm-bundle_test/bin/console(11): require_once('/Users/mklewitz...')
#16 {main}
  thrown in /Users/mklewitz/dev/mongodb-odm-bundle_test/var/cache/prod/ContainerE7S12bi/getDoctrineMongodb_Odm_DefaultDocumentManagerService.php on line 26

The solution is to use another recipe for Symfony >= 5.4 and change the services section in config/packages/prod/doctrine_mongodb.yaml.

Before:

services:
    doctrine_mongodb.system_cache_provider:
        class: Symfony\Component\Cache\DoctrineProvider
        public: false
        arguments:
            - '@doctrine_mongodb.system_cache_pool'

After:

services:
    doctrine_mongodb.system_cache_provider:
        factory: [ 'Doctrine\Common\Cache\Psr6\DoctrineProvider', 'wrap' ]
        class: Doctrine\Common\Cache\Psr6\DoctrineProvider
        public: false
        arguments:
            - '@doctrine_mongodb.system_cache_pool'

I initially reported the issue in mongodb-odm-bundle ( doctrine/DoctrineMongoDBBundle#729 ), but was told to open an issue here.

#1358 will fix this.
Don't hesitate sending a PR next time btw!