diff --git a/UPGRADE-4.4.md b/UPGRADE-4.4.md index aeaedc3c85..7bad8beb02 100644 --- a/UPGRADE-4.4.md +++ b/UPGRADE-4.4.md @@ -313,6 +313,8 @@ Validator Set it to `true` to keep the current behavior and `false` to reject empty strings. In 5.0, it'll become optional and will default to `false`. * Overriding the methods `ConstraintValidatorTestCase::setUp()` and `ConstraintValidatorTestCase::tearDown()` without the `void` return-type is deprecated. + * deprecated `Symfony\Component\Validator\Mapping\Cache\CacheInterface` and all implementations in favor of PSR-6. + * deprecated `ValidatorBuilder::setMetadataCache`, use `ValidatorBuilder::setMappingCache` instead. WebProfilerBundle ----------------- diff --git a/UPGRADE-5.0.md b/UPGRADE-5.0.md index 4059931105..bdb3531204 100644 --- a/UPGRADE-5.0.md +++ b/UPGRADE-5.0.md @@ -567,6 +567,8 @@ Validator * The `symfony/expression-language` component is now required for using the `Expression` constraint * Changed the default value of `Length::$allowEmptyString` to `false` and made it optional * Added support for PHPUnit 8. A `void` return-type was added to the `ConstraintValidatorTestCase::setUp()` and `ConstraintValidatorTestCase::tearDown()` methods. + * The `Symfony\Component\Validator\Mapping\Cache\CacheInterface` and all its implementations have been removed. + * The `ValidatorBuilder::setMetadataCache` has been removed, use `ValidatorBuilder::setMappingCache` instead. WebProfilerBundle ----------------- diff --git a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ValidatorCacheWarmer.php b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ValidatorCacheWarmer.php index e528e6d06b..aa893ea70a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ValidatorCacheWarmer.php +++ b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ValidatorCacheWarmer.php @@ -15,7 +15,6 @@ use Doctrine\Common\Annotations\AnnotationException; use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Cache\Adapter\ArrayAdapter; use Symfony\Component\Cache\Adapter\PhpArrayAdapter; -use Symfony\Component\Validator\Mapping\Cache\Psr6Cache; use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory; use Symfony\Component\Validator\Mapping\Loader\LoaderChain; use Symfony\Component\Validator\Mapping\Loader\LoaderInterface; @@ -59,7 +58,7 @@ class ValidatorCacheWarmer extends AbstractPhpFileCacheWarmer } $loaders = $this->validatorBuilder->getLoaders(); - $metadataFactory = new LazyLoadingMetadataFactory(new LoaderChain($loaders), new Psr6Cache($arrayAdapter)); + $metadataFactory = new LazyLoadingMetadataFactory(new LoaderChain($loaders), $arrayAdapter); foreach ($this->extractSupportedLoaders($loaders) as $loader) { foreach ($loader->getMappedClasses() as $mappedClass) { diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 309a48f244..ec4eedda33 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1288,7 +1288,7 @@ class FrameworkExtension extends Extension } if (!$container->getParameter('kernel.debug')) { - $validatorBuilder->addMethodCall('setMetadataCache', [new Reference('validator.mapping.cache.symfony')]); + $validatorBuilder->addMethodCall('setMappingCache', [new Reference('validator.mapping.cache.adapter')]); } $container->setParameter('validator.auto_mapping', $config['auto_mapping']); diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.xml index bc3fa93619..f3f73a9c2a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.xml @@ -39,13 +39,14 @@ - - - - %validator.mapping.cache.file% - - - + + The "%service_id%" service is deprecated since Symfony 4.4. Use validator.mapping.cache.adapter instead. + + + + + %validator.mapping.cache.file% + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index 80c73bca41..4ceacc8a05 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -908,8 +908,8 @@ abstract class FrameworkExtensionTest extends TestCase } $this->assertSame('addMethodMapping', $calls[++$i][0]); $this->assertSame(['loadValidatorMetadata'], $calls[$i][1]); - $this->assertSame('setMetadataCache', $calls[++$i][0]); - $this->assertEquals([new Reference('validator.mapping.cache.symfony')], $calls[$i][1]); + $this->assertSame('setMappingCache', $calls[++$i][0]); + $this->assertEquals([new Reference('validator.mapping.cache.adapter')], $calls[$i][1]); } public function testValidationService() @@ -951,8 +951,8 @@ abstract class FrameworkExtensionTest extends TestCase $this->assertEquals([new Reference('annotation_reader')], $calls[4][1]); $this->assertSame('addMethodMapping', $calls[5][0]); $this->assertSame(['loadValidatorMetadata'], $calls[5][1]); - $this->assertSame('setMetadataCache', $calls[6][0]); - $this->assertEquals([new Reference('validator.mapping.cache.symfony')], $calls[6][1]); + $this->assertSame('setMappingCache', $calls[6][0]); + $this->assertEquals([new Reference('validator.mapping.cache.adapter')], $calls[6][1]); // no cache this time } @@ -973,8 +973,8 @@ abstract class FrameworkExtensionTest extends TestCase $this->assertSame('enableAnnotationMapping', $calls[5][0]); $this->assertSame('addMethodMapping', $calls[6][0]); $this->assertSame(['loadValidatorMetadata'], $calls[6][1]); - $this->assertSame('setMetadataCache', $calls[7][0]); - $this->assertEquals([new Reference('validator.mapping.cache.symfony')], $calls[7][1]); + $this->assertSame('setMappingCache', $calls[7][0]); + $this->assertEquals([new Reference('validator.mapping.cache.adapter')], $calls[7][1]); $xmlMappings = $calls[3][1][0]; $this->assertCount(3, $xmlMappings); @@ -1033,8 +1033,8 @@ abstract class FrameworkExtensionTest extends TestCase if ($annotations) { $this->assertSame('enableAnnotationMapping', $calls[++$i][0]); } - $this->assertSame('setMetadataCache', $calls[++$i][0]); - $this->assertEquals([new Reference('validator.mapping.cache.symfony')], $calls[$i][1]); + $this->assertSame('setMappingCache', $calls[++$i][0]); + $this->assertEquals([new Reference('validator.mapping.cache.adapter')], $calls[$i][1]); // no cache, no annotations, no static methods } diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index e46f0136d3..2ab4714b48 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -53,7 +53,7 @@ "symfony/translation": "^4.3|^5.0", "symfony/templating": "^3.4|^4.0|^5.0", "symfony/twig-bundle": "^4.4|^5.0", - "symfony/validator": "^4.1|^5.0", + "symfony/validator": "^4.4|^5.0", "symfony/var-dumper": "^4.3|^5.0", "symfony/workflow": "^4.3|^5.0", "symfony/yaml": "^3.4|^4.0|^5.0", @@ -83,7 +83,7 @@ "symfony/translation": "<4.3", "symfony/twig-bridge": "<4.1.1", "symfony/twig-bundle": "<4.4", - "symfony/validator": "<4.1", + "symfony/validator": "<4.4", "symfony/workflow": "<4.3" }, "suggest": { diff --git a/src/Symfony/Component/Validator/CHANGELOG.md b/src/Symfony/Component/Validator/CHANGELOG.md index f019d3896d..698034722d 100644 --- a/src/Symfony/Component/Validator/CHANGELOG.md +++ b/src/Symfony/Component/Validator/CHANGELOG.md @@ -22,6 +22,8 @@ CHANGELOG be used in the violation builder when both `min` and `max` are not null * added ability to use stringable objects as violation messages * Overriding the methods `ConstraintValidatorTestCase::setUp()` and `ConstraintValidatorTestCase::tearDown()` without the `void` return-type is deprecated. + * deprecated `Symfony\Component\Validator\Mapping\Cache\CacheInterface` in favor of PSR-6. + * deprecated `ValidatorBuilder::setMetadataCache`, use `ValidatorBuilder::setMappingCache` instead. 4.3.0 ----- diff --git a/src/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php b/src/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php index f770f46154..bda6edc60b 100644 --- a/src/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php +++ b/src/Symfony/Component/Validator/Mapping/Cache/CacheInterface.php @@ -13,10 +13,14 @@ namespace Symfony\Component\Validator\Mapping\Cache; use Symfony\Component\Validator\Mapping\ClassMetadata; +@trigger_error(sprintf('The "%s" interface is deprecated since Symfony 4.4.', CacheInterface::class), E_USER_DEPRECATED); + /** * Persists ClassMetadata instances in a cache. * * @author Bernhard Schussek + * + * @deprecated since Symfony 4.4. */ interface CacheInterface { diff --git a/src/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php b/src/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php index 36f1febc5a..bfce37c49d 100644 --- a/src/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php +++ b/src/Symfony/Component/Validator/Mapping/Cache/DoctrineCache.php @@ -14,10 +14,14 @@ namespace Symfony\Component\Validator\Mapping\Cache; use Doctrine\Common\Cache\Cache; use Symfony\Component\Validator\Mapping\ClassMetadata; +@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4.', DoctrineCache::class), E_USER_DEPRECATED); + /** * Adapts a Doctrine cache to a CacheInterface. * * @author Florian Voutzinos + * + * @deprecated since Symfony 4.4. */ final class DoctrineCache implements CacheInterface { diff --git a/src/Symfony/Component/Validator/Mapping/Cache/Psr6Cache.php b/src/Symfony/Component/Validator/Mapping/Cache/Psr6Cache.php index 7d1cdd8003..d26168574c 100644 --- a/src/Symfony/Component/Validator/Mapping/Cache/Psr6Cache.php +++ b/src/Symfony/Component/Validator/Mapping/Cache/Psr6Cache.php @@ -14,10 +14,14 @@ namespace Symfony\Component\Validator\Mapping\Cache; use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Validator\Mapping\ClassMetadata; +@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4.', Psr6Cache::class), E_USER_DEPRECATED); + /** * PSR-6 adapter. * * @author Kévin Dunglas + * + * @deprecated since Symfony 4.4. */ class Psr6Cache implements CacheInterface { diff --git a/src/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php b/src/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php index 7a5da0e201..3b62b8661f 100644 --- a/src/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php +++ b/src/Symfony/Component/Validator/Mapping/Factory/LazyLoadingMetadataFactory.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Validator\Mapping\Factory; +use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Validator\Exception\NoSuchMetadataException; use Symfony\Component\Validator\Mapping\Cache\CacheInterface; use Symfony\Component\Validator\Mapping\ClassMetadata; @@ -51,12 +52,17 @@ class LazyLoadingMetadataFactory implements MetadataFactoryInterface /** * Creates a new metadata factory. * - * @param LoaderInterface|null $loader The loader for configuring new metadata - * @param CacheInterface|null $cache The cache for persisting metadata - * between multiple PHP requests + * @param CacheItemPoolInterface|null $cache The cache for persisting metadata + * between multiple PHP requests */ - public function __construct(LoaderInterface $loader = null, CacheInterface $cache = null) + public function __construct(LoaderInterface $loader = null, $cache = null) { + if ($cache instanceof CacheInterface) { + @trigger_error(sprintf('Passing a "%s" to "%s" is deprecated in Symfony 4.4 and will trigger a TypeError in 5.0. Please pass an implementation of "%s" instead.', \get_class($cache), __METHOD__, CacheItemPoolInterface::class), E_USER_DEPRECATED); + } elseif (!$cache instanceof CacheItemPoolInterface && null !== $cache) { + throw new \TypeError(sprintf('Expected an instance of %s, got %s.', CacheItemPoolInterface::class, \is_object($cache) ? \get_class($cache) : \gettype($cache))); + } + $this->loader = $loader; $this->cache = $cache; } @@ -92,11 +98,24 @@ class LazyLoadingMetadataFactory implements MetadataFactoryInterface throw new NoSuchMetadataException(sprintf('The class or interface "%s" does not exist.', $class)); } - if (null !== $this->cache && false !== ($metadata = $this->cache->read($class))) { - // Include constraints from the parent class - $this->mergeConstraints($metadata); + $cacheItem = null; + if ($this->cache instanceof CacheInterface) { + if ($metadata = $this->cache->read($class)) { + // Include constraints from the parent class + $this->mergeConstraints($metadata); - return $this->loadedClasses[$class] = $metadata; + return $this->loadedClasses[$class] = $metadata; + } + } elseif (null !== $this->cache) { + $cacheItem = $this->cache->getItem($this->escapeClassName($class)); + if ($cacheItem->isHit()) { + $metadata = $cacheItem->get(); + + // Include constraints from the parent class + $this->mergeConstraints($metadata); + + return $this->loadedClasses[$class] = $metadata; + } } $metadata = new ClassMetadata($class); @@ -105,8 +124,10 @@ class LazyLoadingMetadataFactory implements MetadataFactoryInterface $this->loader->loadClassMetadata($metadata); } - if (null !== $this->cache) { + if ($this->cache instanceof CacheInterface) { $this->cache->write($metadata); + } elseif (null !== $cacheItem) { + $this->cache->save($cacheItem->set($metadata)); } // Include constraints from the parent class @@ -162,4 +183,17 @@ class LazyLoadingMetadataFactory implements MetadataFactoryInterface return class_exists($class) || interface_exists($class, false); } + + /** + * Replaces backslashes by dots in a class name. + */ + private function escapeClassName(string $class): string + { + if (false !== strpos($class, '@')) { + // anonymous class: replace all PSR6-reserved characters + return str_replace(["\0", '\\', '/', '@', ':', '{', '}', '(', ')'], '.', $class); + } + + return str_replace('\\', '.', $class); + } } diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php index c30e41931a..e73b0d9966 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Cache/DoctrineCacheTest.php @@ -14,6 +14,9 @@ namespace Symfony\Component\Validator\Tests\Mapping\Cache; use Doctrine\Common\Cache\ArrayCache; use Symfony\Component\Validator\Mapping\Cache\DoctrineCache; +/** + * @group legacy + */ class DoctrineCacheTest extends AbstractCacheTest { protected function setUp(): void diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Cache/Psr6CacheTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Cache/Psr6CacheTest.php index 199cbe9252..bf9bf5d447 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Cache/Psr6CacheTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Cache/Psr6CacheTest.php @@ -8,6 +8,8 @@ use Symfony\Component\Validator\Mapping\ClassMetadata; /** * @author Kévin Dunglas + * + * @group legacy */ class Psr6CacheTest extends AbstractCacheTest { diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php index a4f1385cee..6e9b7302db 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php @@ -12,6 +12,8 @@ namespace Symfony\Component\Validator\Tests\Mapping\Factory; use PHPUnit\Framework\TestCase; +use Psr\Cache\CacheItemPoolInterface; +use Symfony\Component\Cache\Adapter\ArrayAdapter; use Symfony\Component\Validator\Constraints\Callback; use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory; @@ -76,7 +78,36 @@ class LazyLoadingMetadataFactoryTest extends TestCase $this->assertEquals($constraints, $metadata->getConstraints()); } - public function testWriteMetadataToCache() + public function testCachedMetadata() + { + $cache = new ArrayAdapter(); + $factory = new LazyLoadingMetadataFactory(new TestLoader(), $cache); + + $expectedConstraints = [ + new ConstraintA(['groups' => ['Default', 'EntityParent']]), + new ConstraintA(['groups' => ['Default', 'EntityInterfaceA', 'EntityParent']]), + ]; + + $metadata = $factory->getMetadataFor(self::PARENT_CLASS); + + $this->assertEquals(self::PARENT_CLASS, $metadata->getClassName()); + $this->assertEquals($expectedConstraints, $metadata->getConstraints()); + + $loader = $this->createMock(LoaderInterface::class); + $loader->expects($this->never())->method('loadClassMetadata'); + + $factory = new LazyLoadingMetadataFactory($loader, $cache); + + $metadata = $factory->getMetadataFor(self::PARENT_CLASS); + + $this->assertEquals(self::PARENT_CLASS, $metadata->getClassName()); + $this->assertEquals($expectedConstraints, $metadata->getConstraints()); + } + + /** + * @group legacy + */ + public function testWriteMetadataToLegacyCache() { $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock(); $factory = new LazyLoadingMetadataFactory(new TestLoader(), $cache); @@ -115,7 +146,10 @@ class LazyLoadingMetadataFactoryTest extends TestCase $this->assertEquals($parentClassConstraints, $metadata->getConstraints()); } - public function testReadMetadataFromCache() + /** + * @group legacy + */ + public function testReadMetadataFromLegacyCache() { $loader = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Loader\LoaderInterface')->getMock(); $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock(); @@ -154,29 +188,19 @@ class LazyLoadingMetadataFactoryTest extends TestCase $this->expectException('Symfony\Component\Validator\Exception\NoSuchMetadataException'); $testedValue = 'error@example.com'; $loader = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Loader\LoaderInterface')->getMock(); - $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock(); + $cache = $this->createMock(CacheItemPoolInterface::class); $factory = new LazyLoadingMetadataFactory($loader, $cache); $cache ->expects($this->never()) - ->method('read'); + ->method('getItem'); $factory->getMetadataFor($testedValue); } public function testMetadataCacheWithRuntimeConstraint() { - $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock(); + $cache = new ArrayAdapter(); $factory = new LazyLoadingMetadataFactory(new TestLoader(), $cache); - $cache - ->expects($this->any()) - ->method('write') - ->willReturnCallback(function ($metadata) { serialize($metadata); }) - ; - - $cache->expects($this->any()) - ->method('read') - ->willReturn(false); - $metadata = $factory->getMetadataFor(self::PARENT_CLASS); $metadata->addConstraint(new Callback(function () {})); diff --git a/src/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php b/src/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php index 0767742641..95c3447086 100644 --- a/src/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php +++ b/src/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Validator\Tests; use PHPUnit\Framework\TestCase; +use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Validator\Util\LegacyTranslatorProxy; use Symfony\Component\Validator\ValidatorBuilder; use Symfony\Component\Validator\ValidatorBuilderInterface; @@ -85,6 +86,15 @@ class ValidatorBuilderTest extends TestCase $this->assertSame($this->builder, $this->builder->disableAnnotationMapping()); } + public function testSetMappingCache() + { + $this->assertSame($this->builder, $this->builder->setMappingCache($this->createMock(CacheItemPoolInterface::class))); + } + + /** + * @group legacy + * @expectedDeprecation Symfony\Component\Validator\ValidatorBuilder::setMetadataCache is deprecated since Symfony 4.4. Use setMappingCache() instead. + */ public function testSetMetadataCache() { $this->assertSame($this->builder, $this->builder->setMetadataCache( diff --git a/src/Symfony/Component/Validator/ValidatorBuilder.php b/src/Symfony/Component/Validator/ValidatorBuilder.php index a65cca4c3d..67faa54762 100644 --- a/src/Symfony/Component/Validator/ValidatorBuilder.php +++ b/src/Symfony/Component/Validator/ValidatorBuilder.php @@ -15,6 +15,7 @@ use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\CachedReader; use Doctrine\Common\Annotations\Reader; use Doctrine\Common\Cache\ArrayCache; +use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface; use Symfony\Component\Validator\Context\ExecutionContextFactory; use Symfony\Component\Validator\Exception\LogicException; @@ -63,9 +64,9 @@ class ValidatorBuilder implements ValidatorBuilderInterface private $validatorFactory; /** - * @var CacheInterface|null + * @var CacheItemPoolInterface|null */ - private $metadataCache; + private $mappingCache; /** * @var TranslatorInterface|null @@ -228,15 +229,37 @@ class ValidatorBuilder implements ValidatorBuilderInterface } /** - * {@inheritdoc} + * Sets the cache for caching class metadata. + * + * @return $this + * + * @deprecated since Symfony 4.4. */ public function setMetadataCache(CacheInterface $cache) { + @trigger_error(sprintf('%s is deprecated since Symfony 4.4. Use setMappingCache() instead.', __METHOD__), E_USER_DEPRECATED); + if (null !== $this->metadataFactory) { throw new ValidatorException('You cannot set a custom metadata cache after setting a custom metadata factory. Configure your metadata factory instead.'); } - $this->metadataCache = $cache; + $this->mappingCache = $cache; + + return $this; + } + + /** + * Sets the cache for caching class metadata. + * + * @return $this + */ + public function setMappingCache(CacheItemPoolInterface $cache) + { + $this->mappingCache = $cache; + + if (null !== $this->metadataFactory) { + throw new ValidatorException('You cannot set a custom mapping cache after setting a custom metadata factory. Configure your metadata factory instead.'); + } return $this; } @@ -330,7 +353,7 @@ class ValidatorBuilder implements ValidatorBuilderInterface $loader = $loaders[0]; } - $metadataFactory = new LazyLoadingMetadataFactory($loader, $this->metadataCache); + $metadataFactory = new LazyLoadingMetadataFactory($loader, $this->mappingCache); } $validatorFactory = $this->validatorFactory ?: new ConstraintValidatorFactory();