[FrameworkBundle] Add cache configuration for PropertyInfo

This commit is contained in:
Alan Poulain 2019-05-09 23:13:46 +02:00 committed by Fabien Potencier
parent 7ef80ff2ff
commit 17f6225d0f
5 changed files with 36 additions and 13 deletions

View File

@ -99,7 +99,6 @@ use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Serializer\Encoder\DecoderInterface; use Symfony\Component\Serializer\Encoder\DecoderInterface;
use Symfony\Component\Serializer\Encoder\EncoderInterface; use Symfony\Component\Serializer\Encoder\EncoderInterface;
use Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata; use Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata;
use Symfony\Component\Serializer\Mapping\Factory\CacheClassMetadataFactory;
use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer; use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer;
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer; use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
@ -1505,18 +1504,8 @@ class FrameworkExtension extends Extension
$chainLoader->replaceArgument(0, $serializerLoaders); $chainLoader->replaceArgument(0, $serializerLoaders);
$container->getDefinition('serializer.mapping.cache_warmer')->replaceArgument(0, $serializerLoaders); $container->getDefinition('serializer.mapping.cache_warmer')->replaceArgument(0, $serializerLoaders);
if (!$container->getParameter('kernel.debug')) { if ($container->getParameter('kernel.debug')) {
$cacheMetadataFactory = new Definition( $container->removeDefinition('serializer.mapping.cache_class_metadata_factory');
CacheClassMetadataFactory::class,
[
new Reference('serializer.mapping.cache_class_metadata_factory.inner'),
new Reference('serializer.mapping.cache.symfony'),
]
);
$cacheMetadataFactory->setPublic(false);
$cacheMetadataFactory->setDecoratedService('serializer.mapping.class_metadata_factory');
$container->setDefinition('serializer.mapping.cache_class_metadata_factory', $cacheMetadataFactory);
} }
if (isset($config['name_converter']) && $config['name_converter']) { if (isset($config['name_converter']) && $config['name_converter']) {
@ -1551,6 +1540,10 @@ class FrameworkExtension extends Extension
$definition->addTag('property_info.description_extractor', ['priority' => -1000]); $definition->addTag('property_info.description_extractor', ['priority' => -1000]);
$definition->addTag('property_info.type_extractor', ['priority' => -1001]); $definition->addTag('property_info.type_extractor', ['priority' => -1001]);
} }
if ($container->getParameter('kernel.debug')) {
$container->removeDefinition('property_info.cache');
}
} }
private function registerLockConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader) private function registerLockConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)

View File

@ -36,6 +36,10 @@
<tag name="cache.pool" /> <tag name="cache.pool" />
</service> </service>
<service id="cache.property_info" parent="cache.system" public="false">
<tag name="cache.pool" />
</service>
<service id="cache.messenger.restart_workers_signal" parent="cache.app" public="false"> <service id="cache.messenger.restart_workers_signal" parent="cache.app" public="false">
<tag name="cache.pool" /> <tag name="cache.pool" />
</service> </service>

View File

@ -21,6 +21,11 @@
<service id="Symfony\Component\PropertyInfo\PropertyListExtractorInterface" alias="property_info" /> <service id="Symfony\Component\PropertyInfo\PropertyListExtractorInterface" alias="property_info" />
<service id="Symfony\Component\PropertyInfo\PropertyInitializableExtractorInterface" alias="property_info" /> <service id="Symfony\Component\PropertyInfo\PropertyInitializableExtractorInterface" alias="property_info" />
<service id="property_info.cache" decorates="property_info" class="Symfony\Component\PropertyInfo\PropertyInfoCacheExtractor">
<argument type="service" id="property_info.cache.inner" />
<argument type="service" id="cache.property_info" />
</service>
<!-- Extractor --> <!-- Extractor -->
<service id="property_info.reflection_extractor" class="Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor"> <service id="property_info.reflection_extractor" class="Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor">
<tag name="property_info.list_extractor" priority="-1000" /> <tag name="property_info.list_extractor" priority="-1000" />

View File

@ -104,6 +104,11 @@
<argument type="service" id="cache.serializer" /> <argument type="service" id="cache.serializer" />
</service> </service>
<service id="serializer.mapping.cache_class_metadata_factory" decorates="serializer.mapping.class_metadata_factory" class="Symfony\Component\Serializer\Mapping\Factory\CacheClassMetadataFactory">
<argument type="service" id="serializer.mapping.cache_class_metadata_factory.inner" />
<argument type="service" id="serializer.mapping.cache.symfony" />
</service>
<!-- Encoders --> <!-- Encoders -->
<service id="serializer.encoder.xml" class="Symfony\Component\Serializer\Encoder\XmlEncoder"> <service id="serializer.encoder.xml" class="Symfony\Component\Serializer\Encoder\XmlEncoder">
<tag name="serializer.encoder" /> <tag name="serializer.encoder" />

View File

@ -1357,6 +1357,22 @@ abstract class FrameworkExtensionTest extends TestCase
$this->assertTrue($container->has('property_info')); $this->assertTrue($container->has('property_info'));
} }
public function testPropertyInfoCacheActivated()
{
$container = $this->createContainerFromFile('property_info');
$this->assertTrue($container->hasDefinition('property_info.cache'));
$cache = $container->getDefinition('property_info.cache')->getArgument(1);
$this->assertEquals(new Reference('cache.property_info'), $cache);
}
public function testPropertyInfoCacheDisabled()
{
$container = $this->createContainerFromFile('property_info', ['kernel.debug' => true, 'kernel.container_class' => __CLASS__]);
$this->assertFalse($container->hasDefinition('property_info.cache'));
}
public function testEventDispatcherService() public function testEventDispatcherService()
{ {
$container = $this->createContainer(['kernel.charset' => 'UTF-8', 'kernel.secret' => 'secret']); $container = $this->createContainer(['kernel.charset' => 'UTF-8', 'kernel.secret' => 'secret']);