Skip to content

Commit 4b61460

Browse files
committed
feature #23747 [Serializer][FrameworkBundle] Add a DateInterval normalizer (Lctrs)
This PR was squashed before being merged into the 3.4 branch (closes #23747). Discussion ---------- [Serializer][FrameworkBundle] Add a DateInterval normalizer | Q | A | ------------- | --- | Branch? | 3.4 | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | | License | MIT | Doc PR | symfony/symfony-docs#8267 Could be useful for API needing to submit a duration. Most code have been adapted from @MisatoTremor's DateInterval form type. Credits to him. Commits ------- 6185cb1991 [Serializer][FrameworkBundle] Add a DateInterval normalizer
2 parents afdfb4e + 95b88e7 commit 4b61460

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
use Symfony\Component\Serializer\Encoder\YamlEncoder;
6868
use Symfony\Component\Serializer\Mapping\Factory\CacheClassMetadataFactory;
6969
use Symfony\Component\Serializer\Normalizer\DataUriNormalizer;
70+
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
7071
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
7172
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
7273
use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
@@ -1525,6 +1526,13 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
15251526
$definition->addTag('serializer.normalizer', array('priority' => -920));
15261527
}
15271528

1529+
if (class_exists(DateIntervalNormalizer::class)) {
1530+
// Run before serializer.normalizer.object
1531+
$definition = $container->register('serializer.normalizer.dateinterval', DateIntervalNormalizer::class);
1532+
$definition->setPublic(false);
1533+
$definition->addTag('serializer.normalizer', array('priority' => -915));
1534+
}
1535+
15281536
if (class_exists('Symfony\Component\Serializer\Normalizer\DateTimeNormalizer')) {
15291537
// Run before serializer.normalizer.object
15301538
$definition = $container->register('serializer.normalizer.datetime', DateTimeNormalizer::class);

Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
3535
use Symfony\Component\PropertyAccess\PropertyAccessor;
3636
use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
37+
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
3738
use Symfony\Component\Serializer\Serializer;
3839
use Symfony\Component\Serializer\Mapping\Factory\CacheClassMetadataFactory;
3940
use Symfony\Component\Serializer\Mapping\Loader\XmlFileLoader;
@@ -776,6 +777,21 @@ public function testDataUriNormalizerRegistered()
776777
$this->assertEquals(-920, $tag[0]['priority']);
777778
}
778779

780+
public function testDateIntervalNormalizerRegistered()
781+
{
782+
if (!class_exists(DateIntervalNormalizer::class)) {
783+
$this->markTestSkipped('The DateIntervalNormalizer has been introduced in the Serializer Component version 3.4.');
784+
}
785+
786+
$container = $this->createContainerFromFile('full');
787+
788+
$definition = $container->getDefinition('serializer.normalizer.dateinterval');
789+
$tag = $definition->getTag('serializer.normalizer');
790+
791+
$this->assertEquals(DateIntervalNormalizer::class, $definition->getClass());
792+
$this->assertEquals(-915, $tag[0]['priority']);
793+
}
794+
779795
public function testDateTimeNormalizerRegistered()
780796
{
781797
if (!class_exists('Symfony\Component\Serializer\Normalizer\DateTimeNormalizer')) {

0 commit comments

Comments
 (0)