Skip to content

Commit c045b1e

Browse files
committed
feature #54320 [VarDumper] Add support for new DOM extension classes in DOMCaster (alexandre-daubois)
This PR was merged into the 7.1 branch. Discussion ---------- [VarDumper] Add support for new DOM extension classes in `DOMCaster` | Q | A | ------------- | --- | Branch? | 7.1 | Bug fix? | no | New feature? | yes | Deprecations? | no | Issues | - | License | MIT Add the new DOM extension classes from PHP 8.4 into DOMCaster, along with "legacy" classes. The "modern" term I'm using in tests in the one used in the different RFCs. Commits ------- 924d587d25 [VarDumper] Add support for new DOM extension classes in `DOMCaster`
2 parents 05e1d00 + 0950ceb commit c045b1e

File tree

4 files changed

+435
-18
lines changed

4 files changed

+435
-18
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
7.1
5+
---
6+
7+
* Add support for new DOM extension classes in `DOMCaster`
8+
49
7.0
510
---
611

Caster/DOMCaster.php

Lines changed: 74 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class DOMCaster
6363
\XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE',
6464
];
6565

66-
public static function castException(\DOMException $e, array $a, Stub $stub, bool $isNested): array
66+
public static function castException(\DOMException|\DOM\Exception $e, array $a, Stub $stub, bool $isNested): array
6767
{
6868
$k = Caster::PREFIX_PROTECTED.'code';
6969
if (isset($a[$k], self::ERROR_CODES[$a[$k]])) {
@@ -82,7 +82,7 @@ public static function castLength($dom, array $a, Stub $stub, bool $isNested): a
8282
return $a;
8383
}
8484

85-
public static function castImplementation(\DOMImplementation $dom, array $a, Stub $stub, bool $isNested): array
85+
public static function castImplementation(\DOMImplementation|\DOM\Implementation $dom, array $a, Stub $stub, bool $isNested): array
8686
{
8787
$a += [
8888
Caster::PREFIX_VIRTUAL.'Core' => '1.0',
@@ -92,7 +92,7 @@ public static function castImplementation(\DOMImplementation $dom, array $a, Stu
9292
return $a;
9393
}
9494

95-
public static function castNode(\DOMNode $dom, array $a, Stub $stub, bool $isNested): array
95+
public static function castNode(\DOMNode|\DOM\Node $dom, array $a, Stub $stub, bool $isNested): array
9696
{
9797
$a += [
9898
'nodeName' => $dom->nodeName,
@@ -104,15 +104,20 @@ public static function castNode(\DOMNode $dom, array $a, Stub $stub, bool $isNes
104104
'lastChild' => new CutStub($dom->lastChild),
105105
'previousSibling' => new CutStub($dom->previousSibling),
106106
'nextSibling' => new CutStub($dom->nextSibling),
107-
'attributes' => $dom->attributes,
108107
'ownerDocument' => new CutStub($dom->ownerDocument),
109-
'namespaceURI' => $dom->namespaceURI,
110-
'prefix' => $dom->prefix,
111-
'localName' => $dom->localName,
112108
'baseURI' => $dom->baseURI ? new LinkStub($dom->baseURI) : $dom->baseURI,
113109
'textContent' => new CutStub($dom->textContent),
114110
];
115111

112+
if ($dom instanceof \DOMNode || $dom instanceof \DOM\Element) {
113+
$a += [
114+
'attributes' => $dom->attributes,
115+
'namespaceURI' => $dom->namespaceURI,
116+
'prefix' => $dom->prefix,
117+
'localName' => $dom->localName,
118+
];
119+
}
120+
116121
return $a;
117122
}
118123

@@ -166,7 +171,48 @@ public static function castDocument(\DOMDocument $dom, array $a, Stub $stub, boo
166171
return $a;
167172
}
168173

169-
public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub $stub, bool $isNested): array
174+
public static function castXMLDocument(\DOM\XMLDocument $dom, array $a, Stub $stub, bool $isNested, int $filter = 0): array
175+
{
176+
$a += [
177+
'doctype' => $dom->doctype,
178+
'implementation' => $dom->implementation,
179+
'documentElement' => new CutStub($dom->documentElement),
180+
'inputEncoding' => $dom->inputEncoding,
181+
'xmlEncoding' => $dom->xmlEncoding,
182+
'xmlStandalone' => $dom->xmlStandalone,
183+
'xmlVersion' => $dom->xmlVersion,
184+
'documentURI' => $dom->documentURI ? new LinkStub($dom->documentURI) : $dom->documentURI,
185+
'formatOutput' => $dom->formatOutput,
186+
];
187+
188+
if (!($filter & Caster::EXCLUDE_VERBOSE)) {
189+
$formatOutput = $dom->formatOutput;
190+
$dom->formatOutput = true;
191+
$a += [Caster::PREFIX_VIRTUAL.'xml' => $dom->saveXML()];
192+
$dom->formatOutput = $formatOutput;
193+
}
194+
195+
return $a;
196+
}
197+
198+
public static function castHTMLDocument(\DOM\HTMLDocument $dom, array $a, Stub $stub, bool $isNested, int $filter = 0): array
199+
{
200+
$a += [
201+
'doctype' => $dom->doctype,
202+
'implementation' => $dom->implementation,
203+
'documentElement' => new CutStub($dom->documentElement),
204+
'inputEncoding' => $dom->inputEncoding,
205+
'documentURI' => $dom->documentURI ? new LinkStub($dom->documentURI) : $dom->documentURI,
206+
];
207+
208+
if (!($filter & Caster::EXCLUDE_VERBOSE)) {
209+
$a += [Caster::PREFIX_VIRTUAL.'html' => $dom->saveHTML()];
210+
}
211+
212+
return $a;
213+
}
214+
215+
public static function castCharacterData(\DOMCharacterData|\DOM\CharacterData $dom, array $a, Stub $stub, bool $isNested): array
170216
{
171217
$a += [
172218
'data' => $dom->data,
@@ -176,30 +222,40 @@ public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub
176222
return $a;
177223
}
178224

179-
public static function castAttr(\DOMAttr $dom, array $a, Stub $stub, bool $isNested): array
225+
public static function castAttr(\DOMAttr|\DOM\Attr $dom, array $a, Stub $stub, bool $isNested): array
180226
{
181227
$a += [
182228
'name' => $dom->name,
183229
'specified' => $dom->specified,
184230
'value' => $dom->value,
185231
'ownerElement' => $dom->ownerElement,
186-
'schemaTypeInfo' => $dom->schemaTypeInfo,
187232
];
188233

234+
if ($dom instanceof \DOMAttr) {
235+
$a += [
236+
'schemaTypeInfo' => $dom->schemaTypeInfo,
237+
];
238+
}
239+
189240
return $a;
190241
}
191242

192-
public static function castElement(\DOMElement $dom, array $a, Stub $stub, bool $isNested): array
243+
public static function castElement(\DOMElement|\DOM\Element $dom, array $a, Stub $stub, bool $isNested): array
193244
{
194245
$a += [
195246
'tagName' => $dom->tagName,
196-
'schemaTypeInfo' => $dom->schemaTypeInfo,
197247
];
198248

249+
if ($dom instanceof \DOMElement) {
250+
$a += [
251+
'schemaTypeInfo' => $dom->schemaTypeInfo,
252+
];
253+
}
254+
199255
return $a;
200256
}
201257

202-
public static function castText(\DOMText $dom, array $a, Stub $stub, bool $isNested): array
258+
public static function castText(\DOMText|\DOM\Text $dom, array $a, Stub $stub, bool $isNested): array
203259
{
204260
$a += [
205261
'wholeText' => $dom->wholeText,
@@ -208,7 +264,7 @@ public static function castText(\DOMText $dom, array $a, Stub $stub, bool $isNes
208264
return $a;
209265
}
210266

211-
public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, bool $isNested): array
267+
public static function castDocumentType(\DOMDocumentType|\DOM\DocumentType $dom, array $a, Stub $stub, bool $isNested): array
212268
{
213269
$a += [
214270
'name' => $dom->name,
@@ -222,7 +278,7 @@ public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $s
222278
return $a;
223279
}
224280

225-
public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, bool $isNested): array
281+
public static function castNotation(\DOMNotation|\DOM\Notation $dom, array $a, Stub $stub, bool $isNested): array
226282
{
227283
$a += [
228284
'publicId' => $dom->publicId,
@@ -232,7 +288,7 @@ public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, boo
232288
return $a;
233289
}
234290

235-
public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, bool $isNested): array
291+
public static function castEntity(\DOMEntity|\DOM\Entity $dom, array $a, Stub $stub, bool $isNested): array
236292
{
237293
$a += [
238294
'publicId' => $dom->publicId,
@@ -246,7 +302,7 @@ public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, bool $i
246302
return $a;
247303
}
248304

249-
public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, Stub $stub, bool $isNested): array
305+
public static function castProcessingInstruction(\DOMProcessingInstruction|\DOM\ProcessingInstruction $dom, array $a, Stub $stub, bool $isNested): array
250306
{
251307
$a += [
252308
'target' => $dom->target,
@@ -256,7 +312,7 @@ public static function castProcessingInstruction(\DOMProcessingInstruction $dom,
256312
return $a;
257313
}
258314

259-
public static function castXPath(\DOMXPath $dom, array $a, Stub $stub, bool $isNested): array
315+
public static function castXPath(\DOMXPath|\DOM\XPath $dom, array $a, Stub $stub, bool $isNested): array
260316
{
261317
$a += [
262318
'document' => $dom->document,

Cloner/AbstractCloner.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,23 +54,38 @@ abstract class AbstractCloner implements ClonerInterface
5454
'Doctrine\Persistence\ObjectManager' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
5555

5656
'DOMException' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castException'],
57+
'DOM\Exception' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castException'],
5758
'DOMStringList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
5859
'DOMNameList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
5960
'DOMImplementation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castImplementation'],
61+
'DOM\Implementation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castImplementation'],
6062
'DOMImplementationList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
6163
'DOMNode' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNode'],
64+
'DOM\Node' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNode'],
6265
'DOMNameSpaceNode' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNameSpaceNode'],
6366
'DOMDocument' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDocument'],
67+
'DOM\XMLDocument' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castXMLDocument'],
68+
'DOM\HTMLDocument' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castHTMLDocument'],
6469
'DOMNodeList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
70+
'DOM\NodeList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
6571
'DOMNamedNodeMap' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
72+
'DOM\DTDNamedNodeMap' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
6673
'DOMCharacterData' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castCharacterData'],
74+
'DOM\CharacterData' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castCharacterData'],
6775
'DOMAttr' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castAttr'],
76+
'DOM\Attr' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castAttr'],
6877
'DOMElement' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castElement'],
78+
'DOM\Element' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castElement'],
6979
'DOMText' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castText'],
80+
'DOM\Text' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castText'],
7081
'DOMDocumentType' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDocumentType'],
82+
'DOM\DocumentType' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDocumentType'],
7183
'DOMNotation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNotation'],
84+
'DOM\Notation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNotation'],
7285
'DOMEntity' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castEntity'],
86+
'DOM\Entity' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castEntity'],
7387
'DOMProcessingInstruction' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castProcessingInstruction'],
88+
'DOM\ProcessingInstruction' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castProcessingInstruction'],
7489
'DOMXPath' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castXPath'],
7590

7691
'XMLReader' => ['Symfony\Component\VarDumper\Caster\XmlReaderCaster', 'castXmlReader'],

0 commit comments

Comments
 (0)