Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit bf71111

Browse filesBrowse files
committed
[Serializer] Remove support for returning empty, iterable, countable, raw object when normalizing
1 parent 97edca8 commit bf71111
Copy full SHA for bf71111

File tree

3 files changed

+8
-100
lines changed
Filter options

3 files changed

+8
-100
lines changed

‎src/Symfony/Component/Serializer/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Serializer/CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ CHANGELOG
66

77
* Remove `ArrayDenormalizer::setSerializer()`, call `setDenormalizer()` instead
88
* Remove the ability to create instances of the annotation classes by passing an array of parameters, use named arguments instead
9+
* Remove support for returning empty, iterable, countable, raw object when normalizing
910

1011
5.4
1112
---

‎src/Symfony/Component/Serializer/Serializer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Serializer/Serializer.php
+5-11Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -165,17 +165,11 @@ public function normalize(mixed $data, string $format = null, array $context = [
165165
}
166166

167167
if (is_iterable($data)) {
168-
if (is_countable($data) && 0 === \count($data)) {
169-
switch (true) {
170-
case ($context[AbstractObjectNormalizer::PRESERVE_EMPTY_OBJECTS] ?? false) && \is_object($data):
171-
if (!$data instanceof \ArrayObject) {
172-
trigger_deprecation('symfony/serializer', '5.4', 'Returning empty object of class "%s" from "%s()" is deprecated. This class should extend "ArrayObject".', get_debug_type($data), __METHOD__);
173-
}
174-
175-
return $data;
176-
case ($context[self::EMPTY_ARRAY_AS_OBJECT] ?? false) && \is_array($data):
177-
return new \ArrayObject();
178-
}
168+
if (is_countable($data) && 0 === \count($data) && (
169+
($context[AbstractObjectNormalizer::PRESERVE_EMPTY_OBJECTS] ?? false) && \is_object($data) ||
170+
($context[self::EMPTY_ARRAY_AS_OBJECT] ?? false) && \is_array($data)
171+
)) {
172+
return new \ArrayObject();
179173
}
180174

181175
$normalized = [];

‎src/Symfony/Component/Serializer/Tests/SerializerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Serializer/Tests/SerializerTest.php
+2-89Lines changed: 2 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ public function testNormalizeWithCollection(Serializer $serializer, array $data)
581581
/** @dataProvider provideObjectOrCollectionTests */
582582
public function testNormalizePreserveEmptyArrayObject(Serializer $serializer, array $data)
583583
{
584-
$expected = '{"a1":{},"a2":{"k":"v"},"b1":[],"b2":{"k":"v"},"c1":{"nested":{}},"c2":{"nested":{"k":"v"}},"d1":{"nested":[]},"d2":{"nested":{"k":"v"}},"e1":{"map":[]},"e2":{"map":{"k":"v"}},"f1":{"map":{}},"f2":{"map":{"k":"v"}},"g1":{"list":{"list":[]},"settings":[]},"g2":{"list":["greg"],"settings":[]}}';
584+
$expected = '{"a1":{},"a2":{"k":"v"},"b1":[],"b2":{"k":"v"},"c1":{"nested":{}},"c2":{"nested":{"k":"v"}},"d1":{"nested":[]},"d2":{"nested":{"k":"v"}},"e1":{"map":[]},"e2":{"map":{"k":"v"}},"f1":{"map":{}},"f2":{"map":{"k":"v"}},"g1":{"list":{},"settings":[]},"g2":{"list":["greg"],"settings":[]}}';
585585
$this->assertSame($expected, $serializer->serialize($data, 'json', [
586586
AbstractObjectNormalizer::PRESERVE_EMPTY_OBJECTS => true,
587587
]));
@@ -599,62 +599,7 @@ public function testNormalizeEmptyArrayAsObject(Serializer $serializer, array $d
599599
/** @dataProvider provideObjectOrCollectionTests */
600600
public function testNormalizeEmptyArrayAsObjectAndPreserveEmptyArrayObject(Serializer $serializer, array $data)
601601
{
602-
$expected = '{"a1":{},"a2":{"k":"v"},"b1":{},"b2":{"k":"v"},"c1":{"nested":{}},"c2":{"nested":{"k":"v"}},"d1":{"nested":{}},"d2":{"nested":{"k":"v"}},"e1":{"map":{}},"e2":{"map":{"k":"v"}},"f1":{"map":{}},"f2":{"map":{"k":"v"}},"g1":{"list":{"list":[]},"settings":{}},"g2":{"list":["greg"],"settings":{}}}';
603-
$this->assertSame($expected, $serializer->serialize($data, 'json', [
604-
Serializer::EMPTY_ARRAY_AS_OBJECT => true,
605-
AbstractObjectNormalizer::PRESERVE_EMPTY_OBJECTS => true,
606-
]));
607-
}
608-
609-
/**
610-
* @dataProvider provideObjectOrCollectionTests
611-
* @group legacy
612-
*/
613-
public function testNormalizeWithCollectionLegacy(Serializer $serializer, array $data)
614-
{
615-
$data['g1'] = new BazLegacy([]);
616-
$data['g2'] = new BazLegacy(['greg']);
617-
$expected = '{"a1":[],"a2":{"k":"v"},"b1":[],"b2":{"k":"v"},"c1":{"nested":[]},"c2":{"nested":{"k":"v"}},"d1":{"nested":[]},"d2":{"nested":{"k":"v"}},"e1":{"map":[]},"e2":{"map":{"k":"v"}},"f1":{"map":[]},"f2":{"map":{"k":"v"}},"g1":{"list":[],"settings":[]},"g2":{"list":["greg"],"settings":[]}}';
618-
$this->assertSame($expected, $serializer->serialize($data, 'json'));
619-
}
620-
621-
/**
622-
* @dataProvider provideObjectOrCollectionTests
623-
* @group legacy
624-
*/
625-
public function testNormalizePreserveEmptyArrayObjectLegacy(Serializer $serializer, array $data)
626-
{
627-
$data['g1'] = new BazLegacy([]);
628-
$data['g2'] = new BazLegacy(['greg']);
629-
$expected = '{"a1":{},"a2":{"k":"v"},"b1":[],"b2":{"k":"v"},"c1":{"nested":{}},"c2":{"nested":{"k":"v"}},"d1":{"nested":[]},"d2":{"nested":{"k":"v"}},"e1":{"map":[]},"e2":{"map":{"k":"v"}},"f1":{"map":{}},"f2":{"map":{"k":"v"}},"g1":{"list":{"list":[]},"settings":[]},"g2":{"list":["greg"],"settings":[]}}';
630-
$this->assertSame($expected, $serializer->serialize($data, 'json', [
631-
AbstractObjectNormalizer::PRESERVE_EMPTY_OBJECTS => true,
632-
]));
633-
}
634-
635-
/**
636-
* @dataProvider provideObjectOrCollectionTests
637-
* @group legacy
638-
*/
639-
public function testNormalizeEmptyArrayAsObjectLegacy(Serializer $serializer, array $data)
640-
{
641-
$data['g1'] = new BazLegacy([]);
642-
$data['g2'] = new BazLegacy(['greg']);
643-
$expected = '{"a1":[],"a2":{"k":"v"},"b1":{},"b2":{"k":"v"},"c1":{"nested":[]},"c2":{"nested":{"k":"v"}},"d1":{"nested":{}},"d2":{"nested":{"k":"v"}},"e1":{"map":{}},"e2":{"map":{"k":"v"}},"f1":{"map":[]},"f2":{"map":{"k":"v"}},"g1":{"list":[],"settings":{}},"g2":{"list":["greg"],"settings":{}}}';
644-
$this->assertSame($expected, $serializer->serialize($data, 'json', [
645-
Serializer::EMPTY_ARRAY_AS_OBJECT => true,
646-
]));
647-
}
648-
649-
/**
650-
* @dataProvider provideObjectOrCollectionTests
651-
* @group legacy
652-
*/
653-
public function testNormalizeEmptyArrayAsObjectAndPreserveEmptyArrayObjectLegacy(Serializer $serializer, array $data)
654-
{
655-
$data['g1'] = new BazLegacy([]);
656-
$data['g2'] = new BazLegacy(['greg']);
657-
$expected = '{"a1":{},"a2":{"k":"v"},"b1":{},"b2":{"k":"v"},"c1":{"nested":{}},"c2":{"nested":{"k":"v"}},"d1":{"nested":{}},"d2":{"nested":{"k":"v"}},"e1":{"map":{}},"e2":{"map":{"k":"v"}},"f1":{"map":{}},"f2":{"map":{"k":"v"}},"g1":{"list":{"list":[]},"settings":{}},"g2":{"list":["greg"],"settings":{}}}';
602+
$expected = '{"a1":{},"a2":{"k":"v"},"b1":{},"b2":{"k":"v"},"c1":{"nested":{}},"c2":{"nested":{"k":"v"}},"d1":{"nested":{}},"d2":{"nested":{"k":"v"}},"e1":{"map":{}},"e2":{"map":{"k":"v"}},"f1":{"map":{}},"f2":{"map":{"k":"v"}},"g1":{"list":{},"settings":{}},"g2":{"list":["greg"],"settings":{}}}';
658603
$this->assertSame($expected, $serializer->serialize($data, 'json', [
659604
Serializer::EMPTY_ARRAY_AS_OBJECT => true,
660605
AbstractObjectNormalizer::PRESERVE_EMPTY_OBJECTS => true,
@@ -868,38 +813,6 @@ public function getIterator(): \Traversable
868813
}
869814
}
870815

871-
class BazLegacy
872-
{
873-
public $list;
874-
875-
public $settings = [];
876-
877-
public function __construct(array $list)
878-
{
879-
$this->list = new DummyListLegacy($list);
880-
}
881-
}
882-
883-
class DummyListLegacy implements \Countable, \IteratorAggregate
884-
{
885-
public $list;
886-
887-
public function __construct(array $list)
888-
{
889-
$this->list = $list;
890-
}
891-
892-
public function count(): int
893-
{
894-
return \count($this->list);
895-
}
896-
897-
public function getIterator(): \Traversable
898-
{
899-
return new \ArrayIterator($this->list);
900-
}
901-
}
902-
903816
interface NormalizerAwareNormalizer extends NormalizerInterface, NormalizerAwareInterface
904817
{
905818
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.