8000 [FrameworkBundle] Deprecate framework.serializer.cache · symfony/framework-bundle@9240368 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9240368

Browse files
committed
[FrameworkBundle] Deprecate framework.serializer.cache
1 parent e8c5548 commit 9240368

File tree

9 files changed

+82
-4
lines changed

9 files changed

+82
-4
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
use Symfony\Component\Finder\Finder;
2525
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
2626
use Symfony\Component\Config\FileLocator;
27+
use Symfony\Component\Serializer\Mapping\Factory\CacheClassMetadataFactory;
2728
use Symfony\Component\Serializer\Normalizer\DataUriNormalizer;
2829
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
2930
use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
@@ -983,6 +984,8 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
983984
$chainLoader->replaceArgument(0, $serializerLoaders);
984985

985986
if (isset($config['cache']) && $config['cache']) {
987+
@trigger_error('The "framework.serializer.cache" option is deprecated since Symfony 3.1 and will be removed in 4.0. You can configure a cache pool called "serializer" under "framework.cache.pools" instead.', E_USER_DEPRECATED);
988+
986989
$container->setParameter(
987990
'serializer.mapping.cache.prefix',
988991
'serializer_'.$this->getKernelRootHash($container)
@@ -991,6 +994,18 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
991994
$container->getDefinition('serializer.mapping.class_metadata_factory')->replaceArgument(
992995
1, new Reference($config['cache'])
993996
);
997+
} elseif (!$container->getParameter('kernel.debug')) {
998+
$cacheMetadataFactory = new Definition(
999+
CacheClassMetadataFactory::class,
1000+
array(
1001+
new Reference('serializer.mapping.class_metadata_factory.inner'),
1002+
new Reference('cache.pool.serializer'),
1003+
)
1004+
);
1005+
$cacheMetadataFactory->setPublic(false);
1006+
$cacheMetadataFactory->setDecoratedService('serializer.mapping.class_metadata_factory');
1007+
1008+
$container->setDefinition('serializer.mapping.cache_class_metadata_factory', $cacheMetadataFactory);
9941009
}
9951010

9961011
if (isset($config['name_converter']) && $config['name_converter']) {

Resources/config/cache_pools.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
2626
</service>
2727

28+
<service id="cache.pool.serializer" parent="cache.adapter.local" public="false">
29+
<tag name="cache.pool" clearer="cache.default_pools_clearer" />
30+
</service>
31+
2832
<service id="cache.adapter.apcu" class="Symfony\Component\Cache\Adapter\ApcuAdapter" abstract="true">
2933
<argument /> <!-- namespace -->
3034
<argument /> <!-- default lifetime -->

Tests/DependencyInjection/Fixtures/php/full.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@
6666
'serializer' => array(
6767
'enabled' => true,
6868
'enable_annotations' => true,
69-
'cache' => 'serializer.mapping.cache.doctrine.apc',
7069
'name_converter' => 'serializer.name_converter.camel_case_to_snake_case',
7170
),
7271
'ide' => 'file%%link%%format',
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', array(
4+
'serializer' => array(
5+
'enabled' => true,
6+
'cache' => 'foo',
7+
),
8+
));

Tests/DependencyInjection/Fixtures/xml/full.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@
4040
</framework:translator>
4141
<framework:validation enabled="true" cache="validator.mapping.cache.doctrine.apc" />
4242
<framework:annotations cache="file" debug="true" file-cache-dir="%kernel.cache_dir%/annotations" />
43-
<framework:serializer enabled="true" enable-annotations="true" cache="serializer.mapping.cache.doctrine.apc" name-converter="serializer.name_converter.camel_case_to_snake_case" />
43+
<framework:serializer enabled="true" enable-annotations="true" name-converter="serializer.name_converter.camel_case_to_snake_case" />
4444
</framework:config>
4545
</container>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config>
9+
<framework:serializer enabled="true" cache="foo"/>
10+
</framework:config>
11+
</container>

Tests/DependencyInjection/Fixtures/yml/full.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ framework:
5252
serializer:
5353
enabled: true
5454
enable_annotations: true
55-
cache: serializer.mapping.cache.doctrine.apc
5655
name_converter: serializer.name_converter.camel_case_to_snake_case
5756
ide: file%%link%%format
5857
request:
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
framework:
2+
serializer:
3+
enabled: true
4+
cache: foo

Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ public function testSerializerEnabled()
449449

450450
$this->assertCount(1, $argument);
451451
$this->assertEquals('Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader', $argument[0]->getClass());
452-
$this->assertEquals(new Reference('serializer.mapping.cache.doctrine.apc'), $container->getDefinition('serializer.mapping.class_metadata_factory')->getArgument(1));
452+
$this->assertNull($container->getDefinition('serializer.mapping.class_metadata_factory')->getArgument(1));
453453
$this->assertEquals(new Reference('serializer.name_converter.camel_case_to_snake_case'), $container->getDefinition('serializer.normalizer.object')->getArgument(1));
454454
}
455455

@@ -521,6 +521,44 @@ public function testObjectNormalizerRegistered()
521521
$this->assertEquals(-1000, $tag[0]['priority']);
522522
}
523523

524+
public function testSerializerCacheActivated()
525+
{
526+
$container = $this->createContainerFromFile('serializer_enabled');
527+
$this->assertTrue($container->hasDefinition('serializer.mapping.cache_class_metadata_factory'));
528+
}
529+
530+
public function testSerializerCacheDisabled()
531+
{
532+
$container = $this->createContainerFromFile('serializer_enabled', array('kernel.debug' => true, 'kernel.container_class' => __CLASS__));
533+
$this->assertFalse($container->hasDefinition('serializer.mapping.cache_class_metadata_factory'));
534+
}
535+
536+
/**
537+
* @group legacy
538+
*/
539+
public function testDeprecatedSerializerCacheOption()
540+
{
541+
$deprecations = array();
542+
set_error_handler(function ($type, $msg) use (&$deprecations) {
543+
if (E_USER_DEPRECATED !== $type) {
544+
restore_error_handler();
545+
546+
return call_user_func_array('PHPUnit_Util_ErrorHandler::handleError', func_get_args());
547+
}
548+
549+
$deprecations[] = $msg;
550+
});
551+
552+
$container = $this->createContainerFromFile('serializer_legacy_cache', array('kernel.debug' => true, 'kernel.container_class' => __CLASS__));
553+
554+
restore_error_handler();
555+
556+
$this->assertCount(1, $deprecations);
557+
$this->assertContains('The "framework.serializer.cache" option is deprecated', $deprecations[0]);
558+
$this->assertFalse($container->hasDefinition('serializer.mapping.cache_class_metadata_factory'));
559+
$this->assertEquals(new Reference('foo'), $container->getDefinition('serializer.mapping.class_metadata_factory')->getArgument(1));
560+
}
561+
524562
public function testAssetHelperWhenAssetsAreEnabled( 4370 )
525563
{
526564
$container = $this->createContainerFromFile('full');

0 commit comments

Comments
 (0)
0