8000 bug #37701 [Serializer] Fix that it will never reach DOMNode (TNAJans… · jeremyFreeAgent/symfony@995d784 · GitHub
[go: up one dir, main page]

Skip to content

Commit 995d784

Browse files
committed
bug symfony#37701 [Serializer] Fix that it will never reach DOMNode (TNAJanssen)
This PR was squashed before being merged into the 3.4 branch. Discussion ---------- [Serializer] Fix that it will never reach DOMNode | Q | A | ------------- | --- | Branch? | 3.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | License | MIT | Doc PR | When providing the DOMNode object, the is_object check will return true. This way it will never reach the DOMNode check. So i moved this check to above the is_object check. Commits ------- 38787ac [Serializer] Fix that it will never reach DOMNode
2 parents f92b727 + 38787ac commit 995d784

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

src/Symfony/Component/Serializer/Encoder/XmlEncoder.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,9 @@ private function selectNodeType(\DOMNode $node, $val)
488488
$node->appendChild($child);
489489
} elseif ($val instanceof \Traversable) {
490490
$this->buildXml($node, $val);
491+
} elseif ($val instanceof \DOMNode) {
492+
$child = $this->dom->importNode($val, true);
493+
$node->appendChild($child);
491494
} elseif (\is_object($val)) {
492495
if (null === $this->serializer) {
493496
throw new BadMethodCallException(sprintf('The serializer needs to be set to allow "%s()" to be used with object data.', __METHOD__));
@@ -502,9 +505,6 @@ private function selectNodeType(\DOMNode $node, $val)
502505
return $this->appendText($node, $val);
503506
} elseif (\is_bool($val)) {
504507
return $this->appendText($node, (int) $val);
505-
} elseif ($val instanceof \DOMNode) {
506-
$child = $this->dom->importNode($val, true);
507-
$node->appendChild($child);
508508
}
509509

510510
return true;

src/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,20 @@ public function testEncodeXmlWithBoolValue()
662662
$this->assertEquals($expectedXml, $actualXml);
663663
}
664664

665+
public function testEncodeXmlWithDomNodeValue()
666+
{
667+
$expectedXml = <<<'XML'
668+
<?xml version="1.0"?>
669+
<response><foo>bar</foo><bar>foo &amp; bar</bar></response>
670+
671+
XML;
672+
$document = new \DOMDocument();
673+
674+
$actualXml = $this->encoder->encode(['foo' => $document->createTextNode('bar'), 'bar' => $document->createTextNode('foo & bar')], 'xml');
675+
676+
$this->assertEquals($expectedXml, $actualXml);
677+
}
678+
665679
public function testEncodeXmlWithDateTimeObjectValue()
666680
{
667681
$xmlEncoder = $this->createXmlEncoderWithDateTimeNormalizer();

0 commit comments

Comments
 (0)
0