Skip to content

Commit ff56741

Browse files
committed
[Config] Deprecate ArrayNodeDefinition::ignoreExtraKeys in favor of setIgnoreExtraKeys and setRemoveExtraKeys
1 parent dc01681 commit ff56741

File tree

5 files changed

+70
-5
lines changed

5 files changed

+70
-5
lines changed

UPGRADE-6.3.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
UPGRADE FROM 6.2 to 6.3
22
=======================
33

4+
Config
5+
------
6+
7+
* Deprecate `ArrayNodeDefinition::ignoreExtraKeys()`, use `ArrayNodeDefinition::setIgnoreExtraKeys(true)` and `ArrayNodeDefinition::setRemoveExtraKeys()` instead
8+
49
Console
510
-------
611

src/Symfony/Component/Config/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ CHANGELOG
55
---
66

77
* Allow enum values in `EnumNode`
8+
* Deprecate `ArrayNodeDefinition::ignoreExtraKeys()`, use `ArrayNodeDefinition::setIgnoreExtraKeys(true)` and `ArrayNodeDefinition::setRemoveExtraKeys()` instead
89

910
6.2
1011
---

src/Symfony/Component/Config/Definition/Builder/ArrayNodeDefinition.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,11 +308,35 @@ public function performNoDeepMerging(): static
308308
* @param bool $remove Whether to remove the extra keys
309309
*
310310
* @return $this
311+
*
312+
* @deprecated since Symfony 6.3, use setIgnoreExtraKeys(true) and setIgnoreExtraKeys() instead
311313
*/
312314
public function ignoreExtraKeys(bool $remove = true): static
313315
{
314-
$this->ignoreExtraKeys = true;
315-
$this->removeExtraKeys = $remove;
316+
trigger_deprecation('symfony/config', '6.3', 'The "%s()" method is deprecated, use "setIgnoreExtraKeys(true)" and "setIgnoreExtraKeys()" instead.', __METHOD__);
317+
318+
$this->setIgnoreExtraKeys(true);
319+
$this->setRemoveExtraKeys($remove);
320+
321+
return $this;
322+
}
323+
324+
/**
325+
* @return $this
326+
*/
327+
public function setIgnoreExtraKeys(bool $ignoreExtraKeys): static
328+
{
329+
$this->ignoreExtraKeys = $ignoreExtraKeys;
330+
331+
return $this;
332+
}
333+
334+
/**
335+
* @return $this
336+
*/
337+
public function setRemoveExtraKeys(bool $removeExtraKeys): static
338+
{
339+
$this->removeExtraKeys = $removeExtraKeys;
316340

317341
return $this;
318342
}

src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,26 @@ public function getConfigTreeBuilder(): TreeBuilder
2323
$rootNode
2424
->children()
2525
->arrayNode('foo')
26-
->ignoreExtraKeys(false)
26+
->setIgnoreExtraKeys(true)
27+
->setRemoveExtraKeys(false)
2728
->children()
2829
->scalarNode('baz')->end()
2930
->scalarNode('qux')->end()
3031
->end()
3132
->end()
3233
->arrayNode('bar')
3334
->prototype('array')
34-
->ignoreExtraKeys(false)
35+
->setIgnoreExtraKeys(true)
36+
->setRemoveExtraKeys(false)
3537
->children()
3638
->scalarNode('corge')->end()
3739
->scalarNode('grault')->end()
3840
->end()
3941
->end()
4042
->end()
4143
->arrayNode('baz')
42-
->ignoreExtraKeys(false)
44+
->setIgnoreExtraKeys(true)
45+
->setRemoveExtraKeys(false)
4346
->end()
4447
;
4548

src/Symfony/Component/Config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\Config\Tests\Definition\Builder;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
1516
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1617
use Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition;
1718
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
@@ -23,6 +24,8 @@
2324

2425
class ArrayNodeDefinitionTest extends TestCase
2526
{
27+
use ExpectDeprecationTrait;
28+
2629
public function testAppendingSomeNode()
2730
{
2831
$parent = new ArrayNodeDefinition('root');
@@ -208,18 +211,47 @@ public function testCanBeDisabled()
208211
$this->assertTrue($this->getField($enabledNode, 'defaultValue'));
209212
}
210213

214+
/**
215+
* @group legacy
216+
*/
211217
public function testIgnoreExtraKeys()
212218
{
213219
$node = new ArrayNodeDefinition('root');
214220

215221
$this->assertFalse($this->getField($node, 'ignoreExtraKeys'));
216222

223+
$this->expectDeprecation('Since symfony/config 6.3: The "Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition::ignoreExtraKeys()" method is deprecated, use "setIgnoreExtraKeys(true)" and "setIgnoreExtraKeys()" instead.');
224+
217225
$result = $node->ignoreExtraKeys();
218226

219227
$this->assertEquals($node, $result);
220228
$this->assertTrue($this->getField($node, 'ignoreExtraKeys'));
221229
}
222230

231+
public function testSetIgnoreExtraKeys()
232+
{
233+
$node = new ArrayNodeDefinition('root');
234+
235+
$this->assertFalse($this->getField($node, 'ignoreExtraKeys'));
236+
237+
$result = $node->setIgnoreExtraKeys(true);
238+
239+
$this->assertEquals($node, $result);
240+
$this->assertTrue($this->getField($node, 'ignoreExtraKeys'));
241+
}
242+
243+
public function testSetRemoveExtraKeys()
244+
{
245+
$node = new ArrayNodeDefinition('root');
246+
247+
$this->assertTrue($this->getField($node, 'removeExtraKeys'));
248+
249+
$result = $node->setRemoveExtraKeys(false);
250+
251+
$this->assertEquals($node, $result);
252+
$this->assertFalse($this->getField($node, 'removeExtraKeys'));
253+
}
254+
223255
public function testNormalizeKeys()
224256
{
225257
$node = new ArrayNodeDefinition('root');

0 commit comments

Comments
 (0)