diff --git a/DependencyInjection/Compiler/DeprecateChangedClassParametersPass.php b/DependencyInjection/Compiler/DeprecateChangedClassParametersPass.php new file mode 100644 index 00000000..4b63f5cf --- /dev/null +++ b/DependencyInjection/Compiler/DeprecateChangedClassParametersPass.php @@ -0,0 +1,87 @@ + Client::class, + 'doctrine_mongodb.odm.configuration.class' => Configuration::class, + 'doctrine_mongodb.odm.document_manager.class' => DocumentManager::class, + 'doctrine_mongodb.odm.manager_configurator.class' => ManagerConfigurator::class, + 'doctrine_mongodb.odm.event_manager.class' => ContainerAwareEventManager::class, + 'doctrine_odm.mongodb.validator_initializer.class' => DoctrineInitializer::class, + 'doctrine_odm.mongodb.validator.unique.class' => UniqueEntityValidator::class, + 'doctrine_mongodb.odm.class' => ManagerRegistry::class, + 'doctrine_mongodb.odm.security.user.provider.class' => EntityUserProvider::class, + 'doctrine_mongodb.odm.proxy_cache_warmer.class' => ProxyCacheWarmer::class, + 'doctrine_mongodb.odm.hydrator_cache_warmer.class' => HydratorCacheWarmer::class, + 'doctrine_mongodb.odm.persistent_collection_cache_warmer.class' => PersistentCollectionCacheWarmer::class, + ] as $parameter => $class + ) { + if (! $container->hasParameter($parameter) || $container->getParameter($parameter) === $class) { + continue; + } + + trigger_deprecation( + 'doctrine/mongodb-odm-bundle', + '4.7', + '"%s" parameter is deprecated, use a compiler pass to update the service instead.', + $parameter, + ); + } + + foreach ( + [ + 'doctrine_mongodb.odm.cache.array.class' => 'Doctrine\Common\Cache\ArrayCache', + 'doctrine_mongodb.odm.cache.apc.class' => 'Doctrine\Common\Cache\ApcCache', + 'doctrine_mongodb.odm.cache.apcu.class' => 'Doctrine\Common\Cache\ApcuCache', + 'doctrine_mongodb.odm.cache.memcache.class' => 'Doctrine\Common\Cache\MemcacheCache', + 'doctrine_mongodb.odm.cache.memcache_host' => 'localhost', + 'doctrine_mongodb.odm.cache.memcache_port' => 11211, + 'doctrine_mongodb.odm.cache.memcache_instance.class' => 'Memcache', + 'doctrine_mongodb.odm.cache.xcache.class' => 'Doctrine\Common\Cache\XcacheCache', + 'doctrine_mongodb.odm.metadata.driver_chain.class' => MappingDriverChain::class, + 'doctrine_mongodb.odm.metadata.attribute.class' => AttributeDriver::class, + 'doctrine_mongodb.odm.metadata.xml.class' => XmlDriver::class, + ] as $parameter => $class + ) { + if (! $container->hasParameter($parameter) || $container->getParameter($parameter) === $class) { + continue; + } + + trigger_deprecation( + 'doctrine/mongodb-odm-bundle', + '4.7', + '"%s" parameter is deprecated, this parameter is used internally for configuration.', + $parameter, + ); + } + } +} diff --git a/DependencyInjection/DoctrineMongoDBExtension.php b/DependencyInjection/DoctrineMongoDBExtension.php index e52afe28..df23fe9d 100644 --- a/DependencyInjection/DoctrineMongoDBExtension.php +++ b/DependencyInjection/DoctrineMongoDBExtension.php @@ -6,32 +6,21 @@ use Doctrine\Bundle\MongoDBBundle\Attribute\AsDocumentListener; use Doctrine\Bundle\MongoDBBundle\Attribute\MapDocument; -use Doctrine\Bundle\MongoDBBundle\CacheWarmer\HydratorCacheWarmer; -use Doctrine\Bundle\MongoDBBundle\CacheWarmer\PersistentCollectionCacheWarmer; -use Doctrine\Bundle\MongoDBBundle\CacheWarmer\ProxyCacheWarmer; use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\FixturesCompilerPass; use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass; use Doctrine\Bundle\MongoDBBundle\EventSubscriber\EventSubscriberInterface; use Doctrine\Bundle\MongoDBBundle\Fixture\ODMFixtureInterface; -use Doctrine\Bundle\MongoDBBundle\ManagerConfigurator; -use Doctrine\Bundle\MongoDBBundle\ManagerRegistry; use Doctrine\Bundle\MongoDBBundle\Repository\ServiceDocumentRepositoryInterface; use Doctrine\Common\Cache\MemcacheCache; use Doctrine\Common\Cache\RedisCache; use Doctrine\Common\DataFixtures\Loader as DataFixturesLoader; use Doctrine\Common\EventSubscriber; -use Doctrine\ODM\MongoDB\Configuration as MongoDBConfiguration; use Doctrine\ODM\MongoDB\DocumentManager; use InvalidArgumentException; use Jean85\PrettyVersions; -use MongoDB\Client; use Symfony\Bridge\Doctrine\ArgumentResolver\EntityValueResolver; -use Symfony\Bridge\Doctrine\ContainerAwareEventManager; use Symfony\Bridge\Doctrine\DependencyInjection\AbstractDoctrineExtension; use Symfony\Bridge\Doctrine\Messenger\DoctrineClearEntityManagerWorkerSubscriber; -use Symfony\Bridge\Doctrine\Security\User\EntityUserProvider; -use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator; -use Symfony\Bridge\Doctrine\Validator\DoctrineInitializer; use Symfony\Component\Cache\Adapter\ApcuAdapter; use Symfony\Component\Cache\Adapter\ArrayAdapter; use Symfony\Component\Cache\Adapter\MemcachedAdapter; @@ -55,7 +44,6 @@ use function in_array; use function interface_exists; use function is_dir; -use function method_exists; use function reset; use function sprintf; @@ -159,8 +147,6 @@ public function load(array $configs, ContainerBuilder $container) $this->loadMessengerServices($container); $this->loadEntityValueResolverServices($container, $loader, $config); - - $this->deprecateClassParameters($container); } /** @@ -675,35 +661,4 @@ private static function getODMVersion(): string return self::$odmVersion; } - - private function deprecateClassParameters(ContainerBuilder $container): void - { - if (! method_exists($container, 'deprecateParameter')) { - return; - } - - foreach ( - [ - 'doctrine_mongodb.odm.connection.class' => Client::class, - 'doctrine_mongodb.odm.configuration.class' => MongoDBConfiguration::class, - 'doctrine_mongodb.odm.document_manager.class' => DocumentManager::class, - 'doctrine_mongodb.odm.manager_configurator.class' => ManagerConfigurator::class, - 'doctrine_mongodb.odm.event_manager.class' => ContainerAwareEventManager::class, - 'doctrine_odm.mongodb.validator_initializer.class' => DoctrineInitializer::class, - 'doctrine_odm.mongodb.validator.unique.class' => UniqueEntityValidator::class, - 'doctrine_mongodb.odm.class' => ManagerRegistry::class, - 'doctrine_mongodb.odm.security.user.provider.class' => EntityUserProvider::class, - 'doctrine_mongodb.odm.proxy_cache_warmer.class' => ProxyCacheWarmer::class, - 'doctrine_mongodb.odm.hydrator_cache_warmer.class' => HydratorCacheWarmer::class, - 'doctrine_mongodb.odm.persistent_collection_cache_warmer.class' => PersistentCollectionCacheWarmer::class, - ] as $parameter => $class - ) { - $container->deprecateParameter( - $parameter, - 'doctrine/mongodb-odm-bundle', - '4.7', - '"%s" parameter is deprecated, you should use a compiler pass to update the service instead.', - ); - } - } } diff --git a/DoctrineMongoDBBundle.php b/DoctrineMongoDBBundle.php index bd88f530..d50a2451 100644 --- a/DoctrineMongoDBBundle.php +++ b/DoctrineMongoDBBundle.php @@ -7,6 +7,7 @@ use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\CacheCompatibilityPass; use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\CreateHydratorDirectoryPass; use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\CreateProxyDirectoryPass; +use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\DeprecateChangedClassParametersPass; use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\FixturesCompilerPass; use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass; use Doctrine\Bundle\MongoDBBundle\DependencyInjection\DoctrineMongoDBExtension; @@ -43,6 +44,7 @@ public function build(ContainerBuilder $container) $container->addCompilerPass(new DoctrineValidationPass('mongodb')); $container->addCompilerPass(new ServiceRepositoryCompilerPass()); $container->addCompilerPass(new FixturesCompilerPass()); + $container->addCompilerPass(new DeprecateChangedClassParametersPass()); if (! $container->hasExtension('security')) { return; diff --git a/Tests/DependencyInjection/Compiler/DeprecateChangesClassParametersPassTest.php b/Tests/DependencyInjection/Compiler/DeprecateChangesClassParametersPassTest.php new file mode 100644 index 00000000..0ef57cb5 --- /dev/null +++ b/Tests/DependencyInjection/Compiler/DeprecateChangesClassParametersPassTest.php @@ -0,0 +1,29 @@ +setParameter('doctrine_mongodb.odm.connection.class', stdClass::class); + + $container->addCompilerPass(new DeprecateChangedClassParametersPass()); + + $this->expectDeprecation('Since doctrine/mongodb-odm-bundle 4.7: "doctrine_mongodb.odm.connection.class" parameter is deprecated, use a compiler pass to update the service instead.'); + + $container->compile(); + } +}