added remove option to ignoreExtraKeys
This commit is contained in:
parent
03e96d24f3
commit
1df4ebecfd
@ -29,6 +29,7 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface
|
||||
protected $addIfNotSet = false;
|
||||
protected $performDeepMerging = true;
|
||||
protected $ignoreExtraKeys = false;
|
||||
protected $removeExtraKeys = true;
|
||||
protected $normalizeKeys = true;
|
||||
|
||||
public function setNormalizeKeys($normalizeKeys)
|
||||
@ -140,10 +141,12 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface
|
||||
* Whether extra keys should just be ignore without an exception.
|
||||
*
|
||||
* @param bool $boolean To allow extra keys
|
||||
* @param bool $remove To remove extra keys
|
||||
*/
|
||||
public function setIgnoreExtraKeys($boolean)
|
||||
public function setIgnoreExtraKeys($boolean, $remove = true)
|
||||
{
|
||||
$this->ignoreExtraKeys = (bool) $boolean;
|
||||
$this->removeExtraKeys = $this->ignoreExtraKeys && $remove;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -300,6 +303,9 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface
|
||||
if (isset($this->children[$name])) {
|
||||
$normalized[$name] = $this->children[$name]->normalize($val);
|
||||
unset($value[$name]);
|
||||
} elseif (false === $this->removeExtraKeys) {
|
||||
$normalized[$name] = $val;
|
||||
unset($value[$name]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition
|
||||
{
|
||||
protected $performDeepMerging = true;
|
||||
protected $ignoreExtraKeys = false;
|
||||
protected $removeExtraKeys = true;
|
||||
protected $children = array();
|
||||
protected $prototype;
|
||||
protected $atLeastOne = false;
|
||||
@ -284,11 +285,14 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition
|
||||
* you want to send an entire configuration array through a special
|
||||
* tree that processes only part of the array.
|
||||
*
|
||||
* @param bool $remove Whether to remove the extra keys
|
||||
*
|
||||
* @return ArrayNodeDefinition
|
||||
*/
|
||||
public function ignoreExtraKeys()
|
||||
public function ignoreExtraKeys($remove = true)
|
||||
{
|
||||
$this->ignoreExtraKeys = true;
|
||||
$this->removeExtraKeys = $remove;
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -393,7 +397,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition
|
||||
$node->addEquivalentValue(false, $this->falseEquivalent);
|
||||
$node->setPerformDeepMerging($this->performDeepMerging);
|
||||
$node->setRequired($this->required);
|
||||
$node->setIgnoreExtraKeys($this->ignoreExtraKeys);
|
||||
$node->setIgnoreExtraKeys($this->ignoreExtraKeys, $this->removeExtraKeys);
|
||||
$node->setNormalizeKeys($this->normalizeKeys);
|
||||
|
||||
if (null !== $this->normalization) {
|
||||
|
@ -50,6 +50,21 @@ class ArrayNodeTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertTrue(true, 'No exception was thrown when setIgnoreExtraKeys is true');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that extra keys are not removed when
|
||||
* ignoreExtraKeys second option is set to false.
|
||||
*
|
||||
* Related to testExceptionThrownOnUnrecognizedChild
|
||||
*/
|
||||
public function testIgnoreExtraKeysNotRemoved()
|
||||
{
|
||||
$node = new ArrayNode('roo');
|
||||
$node->setIgnoreExtraKeys(true, false);
|
||||
|
||||
$data = array('foo' => 'bar');
|
||||
$this->assertSame($data, $node->normalize($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getPreNormalizationTests
|
||||
*/
|
||||
|
Reference in New Issue
Block a user