[Config] Fix YamlReferenceDumper for nested prototypes

This commit is contained in:
Maxime STEINHAUSSER 2016-07-29 16:56:52 +02:00
parent 835176c932
commit 1e8051081c
5 changed files with 47 additions and 2 deletions

View File

@ -96,7 +96,10 @@ class XmlReferenceDumper
$rootAttributes[$key] = str_replace('-', ' ', $rootName).' '.$key;
}
if ($prototype instanceof ArrayNode) {
if ($prototype instanceof PrototypedArrayNode) {
$prototype->setName($key);
$children = array($key => $prototype);
} elseif ($prototype instanceof ArrayNode) {
$children = $prototype->getChildren();
} else {
if ($prototype->hasDefaultValue()) {

View File

@ -199,8 +199,14 @@ class YamlReferenceDumper
if ($prototype instanceof ArrayNode) {
$keyNode = new ArrayNode($key, $node);
$children = $prototype->getChildren();
if ($prototype instanceof PrototypedArrayNode) {
$children = $this->getPrototypeChildren($prototype);
}
// add children
foreach ($prototype->getChildren() as $childNode) {
foreach ($children as $childNode) {
$keyNode->addChild($childNode);
}
} else {

View File

@ -78,6 +78,20 @@ class XmlReferenceDumperTest extends \PHPUnit_Framework_TestCase
pass=""
/>
<!-- prototype -->
<cms-page page="cms page page">
<!-- prototype -->
<!-- title: Required -->
<!-- path: Required -->
<page
locale="page locale"
title=""
path=""
/>
</cms-page>
</config>
EOL

View File

@ -65,6 +65,15 @@ acme_root:
-
user: ~
pass: ~
cms_pages:
# Prototype
page:
# Prototype
locale:
title: ~ # Required
path: ~ # Required
EOL;
}

View File

@ -24,6 +24,7 @@ class ExampleConfiguration implements ConfigurationInterface
$rootNode
->fixXmlConfig('parameter')
->fixXmlConfig('connection')
->fixXmlConfig('cms_page')
->children()
->booleanNode('boolean')->defaultTrue()->end()
->scalarNode('scalar_empty')->end()
@ -67,6 +68,18 @@ class ExampleConfiguration implements ConfigurationInterface
->end()
->end()
->end()
->arrayNode('cms_pages')
->useAttributeAsKey('page')
->prototype('array')
->useAttributeAsKey('locale')
->prototype('array')
->children()
->scalarNode('title')->isRequired()->end()
->scalarNode('path')->isRequired()->end()
->end()
->end()
->end()
->end()
->end()
;