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 $addIfNotSet = false;
|
||||||
protected $performDeepMerging = true;
|
protected $performDeepMerging = true;
|
||||||
protected $ignoreExtraKeys = false;
|
protected $ignoreExtraKeys = false;
|
||||||
|
protected $removeExtraKeys = true;
|
||||||
protected $normalizeKeys = true;
|
protected $normalizeKeys = true;
|
||||||
|
|
||||||
public function setNormalizeKeys($normalizeKeys)
|
public function setNormalizeKeys($normalizeKeys)
|
||||||
@ -140,10 +141,12 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface
|
|||||||
* Whether extra keys should just be ignore without an exception.
|
* Whether extra keys should just be ignore without an exception.
|
||||||
*
|
*
|
||||||
* @param bool $boolean To allow extra keys
|
* @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->ignoreExtraKeys = (bool) $boolean;
|
||||||
|
$this->removeExtraKeys = $this->ignoreExtraKeys && $remove;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -300,6 +303,9 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface
|
|||||||
if (isset($this->children[$name])) {
|
if (isset($this->children[$name])) {
|
||||||
$normalized[$name] = $this->children[$name]->normalize($val);
|
$normalized[$name] = $this->children[$name]->normalize($val);
|
||||||
unset($value[$name]);
|
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 $performDeepMerging = true;
|
||||||
protected $ignoreExtraKeys = false;
|
protected $ignoreExtraKeys = false;
|
||||||
|
protected $removeExtraKeys = true;
|
||||||
protected $children = array();
|
protected $children = array();
|
||||||
protected $prototype;
|
protected $prototype;
|
||||||
protected $atLeastOne = false;
|
protected $atLeastOne = false;
|
||||||
@ -284,11 +285,14 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition
|
|||||||
* you want to send an entire configuration array through a special
|
* you want to send an entire configuration array through a special
|
||||||
* tree that processes only part of the array.
|
* tree that processes only part of the array.
|
||||||
*
|
*
|
||||||
|
* @param bool $remove Whether to remove the extra keys
|
||||||
|
*
|
||||||
* @return ArrayNodeDefinition
|
* @return ArrayNodeDefinition
|
||||||
*/
|
*/
|
||||||
public function ignoreExtraKeys()
|
public function ignoreExtraKeys($remove = true)
|
||||||
{
|
{
|
||||||
$this->ignoreExtraKeys = true;
|
$this->ignoreExtraKeys = true;
|
||||||
|
$this->removeExtraKeys = $remove;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -393,7 +397,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition
|
|||||||
$node->addEquivalentValue(false, $this->falseEquivalent);
|
$node->addEquivalentValue(false, $this->falseEquivalent);
|
||||||
$node->setPerformDeepMerging($this->performDeepMerging);
|
$node->setPerformDeepMerging($this->performDeepMerging);
|
||||||
$node->setRequired($this->required);
|
$node->setRequired($this->required);
|
||||||
$node->setIgnoreExtraKeys($this->ignoreExtraKeys);
|
$node->setIgnoreExtraKeys($this->ignoreExtraKeys, $this->removeExtraKeys);
|
||||||
$node->setNormalizeKeys($this->normalizeKeys);
|
$node->setNormalizeKeys($this->normalizeKeys);
|
||||||
|
|
||||||
if (null !== $this->normalization) {
|
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');
|
$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
|
* @dataProvider getPreNormalizationTests
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user