From 1c176e160396d5f60ea9363fbcdfd9c074fd3671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Deruss=C3=A9?= Date: Sat, 20 Nov 2021 19:20:10 +0100 Subject: [PATCH 1/2] [Config] Allow scalar configuration in PHP Configuration --- .../Config/Builder/ConfigBuilderGenerator.php | 3 +- .../Tests/Builder/Fixtures/Placeholders.php | 2 +- .../Fixtures/ScalarNormalizedTypes.config.php | 12 +++ .../Fixtures/ScalarNormalizedTypes.output.php | 13 ++++ .../Fixtures/ScalarNormalizedTypes.php | 77 +++++++++++++++++++ .../Tests/Builder/GeneratedConfigTest.php | 1 + 6 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.config.php create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.output.php create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.php diff --git a/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php b/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php index 920f12104f3a6..1a47a13b8085b 100644 --- a/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php +++ b/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php @@ -435,8 +435,7 @@ private function buildConstructor(ClassBuilder $class): void $class->addMethod('__construct', ' public function __construct(array $value = []) -{ -'.$body.' +{'.$body.' }'); } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.php index 78baa477355e7..6735b5e955675 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.php @@ -15,7 +15,7 @@ public function getConfigTreeBuilder(): TreeBuilder ->children() ->booleanNode('enabled')->defaultFalse()->end() ->floatNode('favorite_float')->end() - ->arrayNode('good_integers') + ->arrayNode('good_integers') ->integerPrototype()->end() ->end() ->end() diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.config.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.config.php new file mode 100644 index 0000000000000..e7553fc94f17b --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.config.php @@ -0,0 +1,12 @@ +simpleArray('foo') + ->keyedArray('key', 'value') + ->listObject('bar') + ->listObject('baz') + ->listObject()->name('qux'); +}; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.output.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.output.php new file mode 100644 index 0000000000000..ae84a56709062 --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.output.php @@ -0,0 +1,13 @@ + 'foo', + 'keyed_array' => [ + 'key' => 'value' + ], + 'list_object' => [ + 'bar', + 'baz', + ['name' => 'qux'], + ], +]; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.php new file mode 100644 index 0000000000000..c33edeb4f062e --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.php @@ -0,0 +1,77 @@ +getRootNode(); + $rootNode + ->children() + ->arrayNode('simple_array') + ->beforeNormalization()->ifString()->then(function ($v) { return [$v]; })->end() + ->prototype('scalar')->end() + ->end() + ->arrayNode('keyed_array') + ->useAttributeAsKey('name') + ->prototype('array') + ->beforeNormalization() + ->ifString()->then(function ($v) { return [$v]; }) + ->end() + ->prototype('scalar')->end() + ->end() + ->end() + ->arrayNode('list_object') + ->beforeNormalization() + ->always() + ->then(function ($values) { + //inspired by Workflow places + if (isset($values[0]) && \is_string($values[0])) { + return array_map(function (string $value) { + return ['name' => $value]; + }, $values); + } + + if (isset($values[0]) && \is_array($values[0])) { + return $values; + } + + foreach ($values as $name => $value) { + if (\is_array($value) && \array_key_exists('name', $value)) { + continue; + } + $value['name'] = $name; + $values[$name] = $value; + } + + return array_values($values); + }) + ->end() + ->isRequired() + ->requiresAtLeastOneElement() + ->prototype('array') + ->children() + ->scalarNode('name') + ->isRequired() + ->cannotBeEmpty() + ->end() + ->arrayNode('data') + ->normalizeKeys(false) + ->defaultValue([]) + ->prototype('variable') + ->end() + ->end() + ->end() + ->end() + ->end() + ->end() + ; + + return $tb; + } +} diff --git a/src/Symfony/Component/Config/Tests/Builder/GeneratedConfigTest.php b/src/Symfony/Component/Config/Tests/Builder/GeneratedConfigTest.php index 9def6476b57dd..03f5cd43db87d 100644 --- a/src/Symfony/Component/Config/Tests/Builder/GeneratedConfigTest.php +++ b/src/Symfony/Component/Config/Tests/Builder/GeneratedConfigTest.php @@ -56,6 +56,7 @@ protected function tearDown(): void public function fixtureNames() { $array = [ + 'ScalarNormalizedTypes' => 'scalar_normalized_types', 'PrimitiveTypes' => 'primitive_types', 'VariableType' => 'variable_type', 'AddToList' => 'add_to_list', From 2d81a3a89c8908b3901b9731733bb13bccd25000 Mon Sep 17 00:00:00 2001 From: HypeMC Date: Wed, 11 May 2022 17:42:58 +0200 Subject: [PATCH 2/2] [Config] Allow scalar configuration in PHP Configuration --- .../Component/Config/Builder/ClassBuilder.php | 8 +- .../Config/Builder/ConfigBuilderGenerator.php | 126 ++++++++++-- .../Component/Config/Builder/Property.php | 11 + .../Builder/Fixtures/AddToList.config.php | 9 + .../Builder/Fixtures/AddToList.output.php | 9 + .../Tests/Builder/Fixtures/AddToList.php | 9 + .../AddToList/Messenger/ReceivingConfig.php | 21 +- .../AddToList/Messenger/RoutingConfig.php | 15 +- .../Config/AddToList/MessengerConfig.php | 30 ++- .../Config/AddToList/TranslatorConfig.php | 21 +- .../Symfony/Config/AddToListConfig.php | 26 ++- .../Fixtures/ArrayExtraKeys.config.php | 9 + .../Fixtures/ArrayExtraKeys.output.php | 9 + .../Tests/Builder/Fixtures/ArrayExtraKeys.php | 9 + .../Config/ArrayExtraKeys/BarConfig.php | 27 ++- .../Config/ArrayExtraKeys/BazConfig.php | 15 +- .../Config/ArrayExtraKeys/FooConfig.php | 27 ++- .../Symfony/Config/ArrayExtraKeysConfig.php | 32 ++- .../Fixtures/NodeInitialValues.config.php | 9 + .../Fixtures/NodeInitialValues.output.php | 9 + .../Builder/Fixtures/NodeInitialValues.php | 9 + .../Messenger/TransportsConfig.php | 27 ++- .../NodeInitialValues/MessengerConfig.php | 24 +-- .../SomeCleverNameConfig.php | 27 ++- .../Config/NodeInitialValuesConfig.php | 26 ++- .../Builder/Fixtures/Placeholders.config.php | 9 + .../Builder/Fixtures/Placeholders.output.php | 9 + .../Tests/Builder/Fixtures/Placeholders.php | 9 + .../Symfony/Config/PlaceholdersConfig.php | 29 ++- .../Fixtures/PrimitiveTypes.config.php | 9 + .../Fixtures/PrimitiveTypes.output.php | 9 + .../Tests/Builder/Fixtures/PrimitiveTypes.php | 9 + .../Symfony/Config/PrimitiveTypesConfig.php | 47 ++--- .../Fixtures/ScalarNormalizedTypes.config.php | 19 ++ .../Fixtures/ScalarNormalizedTypes.output.php | 22 +- .../Fixtures/ScalarNormalizedTypes.php | 91 ++++++-- .../KeyedListObjectConfig.php | 74 +++++++ .../ListObjectConfig.php | 74 +++++++ .../Nested/NestedListObjectConfig.php | 52 +++++ .../Nested/NestedObjectConfig.php | 52 +++++ .../ScalarNormalizedTypes/NestedConfig.php | 88 ++++++++ .../ScalarNormalizedTypes/ObjectConfig.php | 98 +++++++++ .../Config/ScalarNormalizedTypesConfig.php | 194 ++++++++++++++++++ .../Builder/Fixtures/VariableType.config.php | 9 + .../Builder/Fixtures/VariableType.output.php | 9 + .../Tests/Builder/Fixtures/VariableType.php | 9 + .../Symfony/Config/VariableTypeConfig.php | 17 +- 47 files changed, 1218 insertions(+), 264 deletions(-) create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/KeyedListObjectConfig.php create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/ListObjectConfig.php create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/Nested/NestedListObjectConfig.php create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/Nested/NestedObjectConfig.php create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/NestedConfig.php create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/ObjectConfig.php create mode 100644 src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypesConfig.php diff --git a/src/Symfony/Component/Config/Builder/ClassBuilder.php b/src/Symfony/Component/Config/Builder/ClassBuilder.php index 82fadf691f69d..9960d650806a4 100644 --- a/src/Symfony/Component/Config/Builder/ClassBuilder.php +++ b/src/Symfony/Component/Config/Builder/ClassBuilder.php @@ -68,7 +68,7 @@ public function build(): string } $require .= sprintf('require_once __DIR__.\DIRECTORY_SEPARATOR.\'%s\';', implode('\'.\DIRECTORY_SEPARATOR.\'', $path))."\n"; } - $use = ''; + $use = $require ? "\n" : ''; foreach (array_keys($this->use) as $statement) { $use .= sprintf('use %s;', $statement)."\n"; } @@ -81,7 +81,7 @@ public function build(): string foreach ($this->methods as $method) { $lines = explode("\n", $method->getContent()); foreach ($lines as $line) { - $body .= ' '.$line."\n"; + $body .= ($line ? ' '.$line : '')."\n"; } } @@ -89,9 +89,7 @@ public function build(): string namespace NAMESPACE; -REQUIRE -USE - +REQUIREUSE /** * This class is automatically generated to help in creating a config. */ diff --git a/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php b/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php index 1a47a13b8085b..c63917bcb0eaa 100644 --- a/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php +++ b/src/Symfony/Component/Config/Builder/ConfigBuilderGenerator.php @@ -136,14 +136,39 @@ private function handleArrayNode(ArrayNode $node, ClassBuilder $class, string $n $class->addRequire($childClass); $this->classes[] = $childClass; - $property = $class->addProperty($node->getName(), $childClass->getFqcn()); - $body = ' + $hasNormalizationClosures = $this->hasNormalizationClosures($node); + $property = $class->addProperty( + $node->getName(), + $this->getType($childClass->getFqcn(), $hasNormalizationClosures) + ); + $body = $hasNormalizationClosures ? ' +/** + * @return CLASS|$this + */ +public function NAME($value = []) +{ + if (!\is_array($value)) { + $this->_usedProperties[\'PROPERTY\'] = true; + $this->PROPERTY = $value; + + return $this; + } + + if (!$this->PROPERTY instanceof CLASS) { + $this->_usedProperties[\'PROPERTY\'] = true; + $this->PROPERTY = new CLASS($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException(\'The node created by "NAME()" has already been initialized. You cannot pass values the second time you call NAME().\'); + } + + return $this->PROPERTY; +}' : ' public function NAME(array $value = []): CLASS { if (null === $this->PROPERTY) { $this->_usedProperties[\'PROPERTY\'] = true; $this->PROPERTY = new CLASS($value); - } elseif ([] !== $value) { + } elseif (0 < \func_num_args()) { throw new InvalidConfigurationException(\'The node created by "NAME()" has already been initialized. You cannot pass values the second time you call NAME().\'); } @@ -227,10 +252,29 @@ public function NAME(string $VAR, $VALUE): self } $class->addRequire($childClass); $this->classes[] = $childClass; - $property = $class->addProperty($node->getName(), $childClass->getFqcn().'[]'); + + $hasNormalizationClosures = $this->hasNormalizationClosures($node) || $this->hasNormalizationClosures($prototype); + $property = $class->addProperty( + $node->getName(), + $this->getType($childClass->getFqcn().'[]', $hasNormalizationClosures) + ); if (null === $key = $node->getKeyAttribute()) { - $body = ' + $body = $hasNormalizationClosures ? ' +/** + * @return CLASS|$this + */ +public function NAME($value = []) +{ + $this->_usedProperties[\'PROPERTY\'] = true; + if (!\is_array($value)) { + $this->PROPERTY[] = $value; + + return $this; + } + + return $this->PROPERTY[] = new CLASS($value); +}' : ' public function NAME(array $value = []): CLASS { $this->_usedProperties[\'PROPERTY\'] = true; @@ -239,19 +283,38 @@ public function NAME(array $value = []): CLASS }'; $class->addMethod($methodName, $body, ['PROPERTY' => $property->getName(), 'CLASS' => $childClass->getFqcn()]); } else { - $body = ' -public function NAME(string $VAR, array $VALUE = []): CLASS + $body = $hasNormalizationClosures ? ' +/** + * @return CLASS|$this + */ +public function NAME(string $VAR, $VALUE = []) { - if (!isset($this->PROPERTY[$VAR])) { + if (!\is_array($VALUE)) { $this->_usedProperties[\'PROPERTY\'] = true; + $this->PROPERTY[$VAR] = $VALUE; - return $this->PROPERTY[$VAR] = new CLASS($VALUE); + return $this; } - if ([] === $VALUE) { - return $this->PROPERTY[$VAR]; + + if (!isset($this->PROPERTY[$VAR]) || !$this->PROPERTY[$VAR] instanceof CLASS) { + $this->_usedProperties[\'PROPERTY\'] = true; + $this->PROPERTY[$VAR] = new CLASS($VALUE); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException(\'The node created by "NAME()" has already been initialized. You cannot pass values the second time you call NAME().\'); + } + + return $this->PROPERTY[$VAR]; +}' : ' +public function NAME(string $VAR, array $VALUE = []): CLASS +{ + if (!isset($this->PROPERTY[$VAR])) { + $this->_usedProperties[\'PROPERTY\'] = true; + $this->PROPERTY[$VAR] = new CLASS($VALUE); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException(\'The node created by "NAME()" has already been initialized. You cannot pass values the second time you call NAME().\'); } - throw new InvalidConfigurationException(\'The node created by "NAME()" has already been initialized. You cannot pass values the second time you call NAME().\'); + return $this->PROPERTY[$VAR]; }'; $class->addUse(InvalidConfigurationException::class); $class->addMethod($methodName, $body, ['PROPERTY' => $property->getName(), 'CLASS' => $childClass->getFqcn(), 'VAR' => '' === $key ? 'key' : $key, 'VALUE' => 'value' === $key ? 'data' : 'value']); @@ -375,16 +438,22 @@ private function buildToArray(ClassBuilder $class): void $code = '$this->PROPERTY'; if (null !== $p->getType()) { if ($p->isArray()) { - $code = 'array_map(function ($v) { return $v->toArray(); }, $this->PROPERTY)'; + $code = $p->areScalarsAllowed() + ? 'array_map(function ($v) { return $v instanceof CLASS ? $v->toArray() : $v; }, $this->PROPERTY)' + : 'array_map(function ($v) { return $v->toArray(); }, $this->PROPERTY)' + ; } else { - $code = '$this->PROPERTY->toArray()'; + $code = $p->areScalarsAllowed() + ? '$this->PROPERTY instanceof CLASS ? $this->PROPERTY->toArray() : $this->PROPERTY' + : '$this->PROPERTY->toArray()' + ; } } $body .= strtr(' if (isset($this->_usedProperties[\'PROPERTY\'])) { $output[\'ORG_NAME\'] = '.$code.'; - }', ['PROPERTY' => $p->getName(), 'ORG_NAME' => $p->getOriginalName()]); + }', ['PROPERTY' => $p->getName(), 'ORG_NAME' => $p->getOriginalName(), 'CLASS' => $p->getType()]); } $extraKeys = $class->shouldAllowExtraKeys() ? ' + $this->_extraKeys' : ''; @@ -405,9 +474,15 @@ private function buildConstructor(ClassBuilder $class): void $code = '$value[\'ORG_NAME\']'; if (null !== $p->getType()) { if ($p->isArray()) { - $code = 'array_map(function ($v) { return new '.$p->getType().'($v); }, $value[\'ORG_NAME\'])'; + $code = $p->areScalarsAllowed() + ? 'array_map(function ($v) { return \is_array($v) ? new '.$p->getType().'($v) : $v; }, $value[\'ORG_NAME\'])' + : 'array_map(function ($v) { return new '.$p->getType().'($v); }, $value[\'ORG_NAME\'])' + ; } else { - $code = 'new '.$p->getType().'($value[\'ORG_NAME\'])'; + $code = $p->areScalarsAllowed() + ? '\is_array($value[\'ORG_NAME\']) ? new '.$p->getType().'($value[\'ORG_NAME\']) : $value[\'ORG_NAME\']' + : 'new '.$p->getType().'($value[\'ORG_NAME\'])' + ; } } @@ -466,4 +541,21 @@ private function getSubNamespace(ClassBuilder $rootClass): string { return sprintf('%s\\%s', $rootClass->getNamespace(), substr($rootClass->getName(), 0, -6)); } + + private function hasNormalizationClosures(NodeInterface $node): bool + { + try { + $r = new \ReflectionProperty($node, 'normalizationClosures'); + } catch (\ReflectionException $e) { + return false; + } + $r->setAccessible(true); + + return [] !== $r->getValue($node); + } + + private function getType(string $classType, bool $hasNormalizationClosures): string + { + return $classType.($hasNormalizationClosures ? '|scalar' : ''); + } } diff --git a/src/Symfony/Component/Config/Builder/Property.php b/src/Symfony/Component/Config/Builder/Property.php index 1b24c47cc909b..5a6f7e31bfe70 100644 --- a/src/Symfony/Component/Config/Builder/Property.php +++ b/src/Symfony/Component/Config/Builder/Property.php @@ -23,6 +23,7 @@ class Property private $name; private $originalName; private $array = false; + private $scalarsAllowed = false; private $type = null; private $content; @@ -47,6 +48,11 @@ public function setType(string $type): void $this->array = false; $this->type = $type; + if ('|scalar' === substr($type, -7)) { + $this->scalarsAllowed = true; + $this->type = $type = substr($type, 0, -7); + } + if ('[]' === substr($type, -2)) { $this->array = true; $this->type = substr($type, 0, -2); @@ -72,4 +78,9 @@ public function isArray(): bool { return $this->array; } + + public function areScalarsAllowed(): bool + { + return $this->scalarsAllowed; + } } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.config.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.config.php index 5bb32b89be990..4dc2d3e87ab53 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.config.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.config.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + use Symfony\Config\AddToListConfig; return static function (AddToListConfig $config) { diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.output.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.output.php index 6efdb83839604..1949f59c24963 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.output.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.output.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + return [ 'translator' => [ 'fallbacks' => ['sv', 'fr', 'es'], diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.php index 949cbe9e4e5ac..5f324d29cb0b4 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Component\Config\Tests\Builder\Fixtures; use Symfony\Component\Config\Definition\Builder\TreeBuilder; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/Messenger/ReceivingConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/Messenger/ReceivingConfig.php index c757266195482..5d8d28af443c3 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/Messenger/ReceivingConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/Messenger/ReceivingConfig.php @@ -2,11 +2,9 @@ namespace Symfony\Config\AddToList\Messenger; - use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -15,7 +13,7 @@ class ReceivingConfig private $priority; private $color; private $_usedProperties = []; - + /** * @default null * @param ParamConfigurator|int $value @@ -25,10 +23,10 @@ public function priority($value): self { $this->_usedProperties['priority'] = true; $this->priority = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|mixed $value @@ -38,30 +36,29 @@ public function color($value): self { $this->_usedProperties['color'] = true; $this->color = $value; - + return $this; } - + public function __construct(array $value = []) { - if (array_key_exists('priority', $value)) { $this->_usedProperties['priority'] = true; $this->priority = $value['priority']; unset($value['priority']); } - + if (array_key_exists('color', $value)) { $this->_usedProperties['color'] = true; $this->color = $value['color']; unset($value['color']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -71,7 +68,7 @@ public function toArray(): array if (isset($this->_usedProperties['color'])) { $output['color'] = $this->color; } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/Messenger/RoutingConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/Messenger/RoutingConfig.php index 275dca34da3af..563ec25dcdaf2 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/Messenger/RoutingConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/Messenger/RoutingConfig.php @@ -2,11 +2,9 @@ namespace Symfony\Config\AddToList\Messenger; - use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -14,7 +12,7 @@ class RoutingConfig { private $senders; private $_usedProperties = []; - + /** * @param ParamConfigurator|list $value * @return $this @@ -23,31 +21,30 @@ public function senders($value): self { $this->_usedProperties['senders'] = true; $this->senders = $value; - + return $this; } - + public function __construct(array $value = []) { - if (array_key_exists('senders', $value)) { $this->_usedProperties['senders'] = true; $this->senders = $value['senders']; unset($value['senders']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; if (isset($this->_usedProperties['senders'])) { $output['senders'] = $this->senders; } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/MessengerConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/MessengerConfig.php index 85b593a1b05f1..bc8625d9fb0c1 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/MessengerConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/MessengerConfig.php @@ -7,7 +7,6 @@ use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -16,48 +15,45 @@ class MessengerConfig private $routing; private $receiving; private $_usedProperties = []; - + public function routing(string $message_class, array $value = []): \Symfony\Config\AddToList\Messenger\RoutingConfig { if (!isset($this->routing[$message_class])) { $this->_usedProperties['routing'] = true; - - return $this->routing[$message_class] = new \Symfony\Config\AddToList\Messenger\RoutingConfig($value); - } - if ([] === $value) { - return $this->routing[$message_class]; + $this->routing[$message_class] = new \Symfony\Config\AddToList\Messenger\RoutingConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "routing()" has already been initialized. You cannot pass values the second time you call routing().'); } - - throw new InvalidConfigurationException('The node created by "routing()" has already been initialized. You cannot pass values the second time you call routing().'); + + return $this->routing[$message_class]; } - + public function receiving(array $value = []): \Symfony\Config\AddToList\Messenger\ReceivingConfig { $this->_usedProperties['receiving'] = true; - + return $this->receiving[] = new \Symfony\Config\AddToList\Messenger\ReceivingConfig($value); } - + public function __construct(array $value = []) { - if (array_key_exists('routing', $value)) { $this->_usedProperties['routing'] = true; $this->routing = array_map(function ($v) { return new \Symfony\Config\AddToList\Messenger\RoutingConfig($v); }, $value['routing']); unset($value['routing']); } - + if (array_key_exists('receiving', $value)) { $this->_usedProperties['receiving'] = true; $this->receiving = array_map(function ($v) { return new \Symfony\Config\AddToList\Messenger\ReceivingConfig($v); }, $value['receiving']); unset($value['receiving']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -67,7 +63,7 @@ public function toArray(): array if (isset($this->_usedProperties['receiving'])) { $output['receiving'] = array_map(function ($v) { return $v->toArray(); }, $this->receiving); } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/TranslatorConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/TranslatorConfig.php index 79f041cea6da0..25813dade63a8 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/TranslatorConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToList/TranslatorConfig.php @@ -2,11 +2,9 @@ namespace Symfony\Config\AddToList; - use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -15,7 +13,7 @@ class TranslatorConfig private $fallbacks; private $sources; private $_usedProperties = []; - + /** * @param ParamConfigurator|list $value * @return $this @@ -24,10 +22,10 @@ public function fallbacks($value): self { $this->_usedProperties['fallbacks'] = true; $this->fallbacks = $value; - + return $this; } - + /** * @param ParamConfigurator|mixed $value * @return $this @@ -36,30 +34,29 @@ public function source(string $source_class, $value): self { $this->_usedProperties['sources'] = true; $this->sources[$source_class] = $value; - + return $this; } - + public function __construct(array $value = []) { - if (array_key_exists('fallbacks', $value)) { $this->_usedProperties['fallbacks'] = true; $this->fallbacks = $value['fallbacks']; unset($value['fallbacks']); } - + if (array_key_exists('sources', $value)) { $this->_usedProperties['sources'] = true; $this->sources = $value['sources']; unset($value['sources']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -69,7 +66,7 @@ public function toArray(): array if (isset($this->_usedProperties['sources'])) { $output['sources'] = $this->sources; } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToListConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToListConfig.php index e6f0c262b88db..a8b0adb28b5f2 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToListConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/AddToList/Symfony/Config/AddToListConfig.php @@ -7,7 +7,6 @@ use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -16,56 +15,55 @@ class AddToListConfig implements \Symfony\Component\Config\Builder\ConfigBuilder private $translator; private $messenger; private $_usedProperties = []; - + public function translator(array $value = []): \Symfony\Config\AddToList\TranslatorConfig { if (null === $this->translator) { $this->_usedProperties['translator'] = true; $this->translator = new \Symfony\Config\AddToList\TranslatorConfig($value); - } elseif ([] !== $value) { + } elseif (0 < \func_num_args()) { throw new InvalidConfigurationException('The node created by "translator()" has already been initialized. You cannot pass values the second time you call translator().'); } - + return $this->translator; } - + public function messenger(array $value = []): \Symfony\Config\AddToList\MessengerConfig { if (null === $this->messenger) { $this->_usedProperties['messenger'] = true; $this->messenger = new \Symfony\Config\AddToList\MessengerConfig($value); - } elseif ([] !== $value) { + } elseif (0 < \func_num_args()) { throw new InvalidConfigurationException('The node created by "messenger()" has already been initialized. You cannot pass values the second time you call messenger().'); } - + return $this->messenger; } - + public function getExtensionAlias(): string { return 'add_to_list'; } - + public function __construct(array $value = []) { - if (array_key_exists('translator', $value)) { $this->_usedProperties['translator'] = true; $this->translator = new \Symfony\Config\AddToList\TranslatorConfig($value['translator']); unset($value['translator']); } - + if (array_key_exists('messenger', $value)) { $this->_usedProperties['messenger'] = true; $this->messenger = new \Symfony\Config\AddToList\MessengerConfig($value['messenger']); unset($value['messenger']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -75,7 +73,7 @@ public function toArray(): array if (isset($this->_usedProperties['messenger'])) { $output['messenger'] = $this->messenger->toArray(); } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.config.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.config.php index 45069e7490c22..598255fec6bf6 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.config.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.config.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + use Symfony\Config\ArrayExtraKeysConfig; return static function (ArrayExtraKeysConfig $config) { diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.output.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.output.php index d2fdc1ef5c8e4..ff0bdbd686cb7 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.output.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.output.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + return [ 'foo' => [ 'baz' => 'foo_baz', diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.php index 751fe5c2934cc..96c515e55b46d 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Component\Config\Tests\Builder\Fixtures; use Symfony\Component\Config\Definition\Builder\TreeBuilder; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/BarConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/BarConfig.php index 256454f164bbf..bb3c6f568607b 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/BarConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/BarConfig.php @@ -2,10 +2,8 @@ namespace Symfony\Config\ArrayExtraKeys; - use Symfony\Component\Config\Loader\ParamConfigurator; - /** * This class is automatically generated to help in creating a config. */ @@ -15,7 +13,7 @@ class BarConfig private $grault; private $_usedProperties = []; private $_extraKeys; - + /** * @default null * @param ParamConfigurator|mixed $value @@ -25,10 +23,10 @@ public function corge($value): self { $this->_usedProperties['corge'] = true; $this->corge = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|mixed $value @@ -38,29 +36,28 @@ public function grault($value): self { $this->_usedProperties['grault'] = true; $this->grault = $value; - + return $this; } - + public function __construct(array $value = []) { - if (array_key_exists('corge', $value)) { $this->_usedProperties['corge'] = true; $this->corge = $value['corge']; unset($value['corge']); } - + if (array_key_exists('grault', $value)) { $this->_usedProperties['grault'] = true; $this->grault = $value['grault']; unset($value['grault']); } - + $this->_extraKeys = $value; - + } - + public function toArray(): array { $output = []; @@ -70,10 +67,10 @@ public function toArray(): array if (isset($this->_usedProperties['grault'])) { $output['grault'] = $this->grault; } - + return $output + $this->_extraKeys; } - + /** * @param ParamConfigurator|mixed $value * @return $this @@ -81,7 +78,7 @@ public function toArray(): array public function set(string $key, $value): self { $this->_extraKeys[$key] = $value; - + return $this; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/BazConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/BazConfig.php index d64633eab9c66..e198dac797e05 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/BazConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/BazConfig.php @@ -2,31 +2,28 @@ namespace Symfony\Config\ArrayExtraKeys; - use Symfony\Component\Config\Loader\ParamConfigurator; - /** * This class is automatically generated to help in creating a config. */ class BazConfig { private $_extraKeys; - + public function __construct(array $value = []) { - $this->_extraKeys = $value; - + } - + public function toArray(): array { $output = []; - + return $output + $this->_extraKeys; } - + /** * @param ParamConfigurator|mixed $value * @return $this @@ -34,7 +31,7 @@ public function toArray(): array public function set(string $key, $value): self { $this->_extraKeys[$key] = $value; - + return $this; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/FooConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/FooConfig.php index c8f713341eda3..1204c3a06f74a 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/FooConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeys/FooConfig.php @@ -2,10 +2,8 @@ namespace Symfony\Config\ArrayExtraKeys; - use Symfony\Component\Config\Loader\ParamConfigurator; - /** * This class is automatically generated to help in creating a config. */ @@ -15,7 +13,7 @@ class FooConfig private $qux; private $_usedProperties = []; private $_extraKeys; - + /** * @default null * @param ParamConfigurator|mixed $value @@ -25,10 +23,10 @@ public function baz($value): self { $this->_usedProperties['baz'] = true; $this->baz = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|mixed $value @@ -38,29 +36,28 @@ public function qux($value): self { $this->_usedProperties['qux'] = true; $this->qux = $value; - + return $this; } - + public function __construct(array $value = []) { - if (array_key_exists('baz', $value)) { $this->_usedProperties['baz'] = true; $this->baz = $value['baz']; unset($value['baz']); } - + if (array_key_exists('qux', $value)) { $this->_usedProperties['qux'] = true; $this->qux = $value['qux']; unset($value['qux']); } - + $this->_extraKeys = $value; - + } - + public function toArray(): array { $output = []; @@ -70,10 +67,10 @@ public function toArray(): array if (isset($this->_usedProperties['qux'])) { $output['qux'] = $this->qux; } - + return $output + $this->_extraKeys; } - + /** * @param ParamConfigurator|mixed $value * @return $this @@ -81,7 +78,7 @@ public function toArray(): array public function set(string $key, $value): self { $this->_extraKeys[$key] = $value; - + return $this; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeysConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeysConfig.php index 3d8adb7095b33..2d7628f038736 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeysConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ArrayExtraKeys/Symfony/Config/ArrayExtraKeysConfig.php @@ -8,7 +8,6 @@ use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -18,69 +17,68 @@ class ArrayExtraKeysConfig implements \Symfony\Component\Config\Builder\ConfigBu private $bar; private $baz; private $_usedProperties = []; - + public function foo(array $value = []): \Symfony\Config\ArrayExtraKeys\FooConfig { if (null === $this->foo) { $this->_usedProperties['foo'] = true; $this->foo = new \Symfony\Config\ArrayExtraKeys\FooConfig($value); - } elseif ([] !== $value) { + } elseif (0 < \func_num_args()) { throw new InvalidConfigurationException('The node created by "foo()" has already been initialized. You cannot pass values the second time you call foo().'); } - + return $this->foo; } - + public function bar(array $value = []): \Symfony\Config\ArrayExtraKeys\BarConfig { $this->_usedProperties['bar'] = true; - + return $this->bar[] = new \Symfony\Config\ArrayExtraKeys\BarConfig($value); } - + public function baz(array $value = []): \Symfony\Config\ArrayExtraKeys\BazConfig { if (null === $this->baz) { $this->_usedProperties['baz'] = true; $this->baz = new \Symfony\Config\ArrayExtraKeys\BazConfig($value); - } elseif ([] !== $value) { + } elseif (0 < \func_num_args()) { throw new InvalidConfigurationException('The node created by "baz()" has already been initialized. You cannot pass values the second time you call baz().'); } - + return $this->baz; } - + public function getExtensionAlias(): string { return 'array_extra_keys'; } - + public function __construct(array $value = []) { - if (array_key_exists('foo', $value)) { $this->_usedProperties['foo'] = true; $this->foo = new \Symfony\Config\ArrayExtraKeys\FooConfig($value['foo']); unset($value['foo']); } - + if (array_key_exists('bar', $value)) { $this->_usedProperties['bar'] = true; $this->bar = array_map(function ($v) { return new \Symfony\Config\ArrayExtraKeys\BarConfig($v); }, $value['bar']); unset($value['bar']); } - + if (array_key_exists('baz', $value)) { $this->_usedProperties['baz'] = true; $this->baz = new \Symfony\Config\ArrayExtraKeys\BazConfig($value['baz']); unset($value['baz']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -93,7 +91,7 @@ public function toArray(): array if (isset($this->_usedProperties['baz'])) { $output['baz'] = $this->baz->toArray(); } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.config.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.config.php index 4b86755c91a5b..430258ac382fa 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.config.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.config.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + use Symfony\Config\NodeInitialValuesConfig; return static function (NodeInitialValuesConfig $config) { diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.output.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.output.php index 7fe70f9645b9e..c4ad8affe2144 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.output.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.output.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + return [ 'some_clever_name' => [ 'first' => 'bar', diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.php index c290cf9730670..153af57be9b5b 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Component\Config\Tests\Builder\Fixtures; use Symfony\Component\Config\Definition\Builder\TreeBuilder; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/Messenger/TransportsConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/Messenger/TransportsConfig.php index 3acc0247ac726..5fa9c2b426464 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/Messenger/TransportsConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/Messenger/TransportsConfig.php @@ -2,11 +2,9 @@ namespace Symfony\Config\NodeInitialValues\Messenger; - use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -16,7 +14,7 @@ class TransportsConfig private $serializer; private $options; private $_usedProperties = []; - + /** * @default null * @param ParamConfigurator|mixed $value @@ -26,10 +24,10 @@ public function dsn($value): self { $this->_usedProperties['dsn'] = true; $this->dsn = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|mixed $value @@ -39,10 +37,10 @@ public function serializer($value): self { $this->_usedProperties['serializer'] = true; $this->serializer = $value; - + return $this; } - + /** * @param ParamConfigurator|list $value * @return $this @@ -51,36 +49,35 @@ public function options($value): self { $this->_usedProperties['options'] = true; $this->options = $value; - + return $this; } - + public function __construct(array $value = []) { - if (array_key_exists('dsn', $value)) { $this->_usedProperties['dsn'] = true; $this->dsn = $value['dsn']; unset($value['dsn']); } - + if (array_key_exists('serializer', $value)) { $this->_usedProperties['serializer'] = true; $this->serializer = $value['serializer']; unset($value['serializer']); } - + if (array_key_exists('options', $value)) { $this->_usedProperties['options'] = true; $this->options = $value['options']; unset($value['options']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -93,7 +90,7 @@ public function toArray(): array if (isset($this->_usedProperties['options'])) { $output['options'] = $this->options; } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/MessengerConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/MessengerConfig.php index 12ff61109cae7..d174c8932b4f8 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/MessengerConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/MessengerConfig.php @@ -6,7 +6,6 @@ use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -14,42 +13,39 @@ class MessengerConfig { private $transports; private $_usedProperties = []; - + public function transports(string $name, array $value = []): \Symfony\Config\NodeInitialValues\Messenger\TransportsConfig { if (!isset($this->transports[$name])) { $this->_usedProperties['transports'] = true; - - return $this->transports[$name] = new \Symfony\Config\NodeInitialValues\Messenger\TransportsConfig($value); + $this->transports[$name] = new \Symfony\Config\NodeInitialValues\Messenger\TransportsConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "transports()" has already been initialized. You cannot pass values the second time you call transports().'); } - if ([] === $value) { - return $this->transports[$name]; - } - - throw new InvalidConfigurationException('The node created by "transports()" has already been initialized. You cannot pass values the second time you call transports().'); + + return $this->transports[$name]; } - + public function __construct(array $value = []) { - if (array_key_exists('transports', $value)) { $this->_usedProperties['transports'] = true; $this->transports = array_map(function ($v) { return new \Symfony\Config\NodeInitialValues\Messenger\TransportsConfig($v); }, $value['transports']); unset($value['transports']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; if (isset($this->_usedProperties['transports'])) { $output['transports'] = array_map(function ($v) { return $v->toArray(); }, $this->transports); } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/SomeCleverNameConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/SomeCleverNameConfig.php index 3ca87c25eec12..9629e95bfa443 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/SomeCleverNameConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValues/SomeCleverNameConfig.php @@ -2,11 +2,9 @@ namespace Symfony\Config\NodeInitialValues; - use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -16,7 +14,7 @@ class SomeCleverNameConfig private $second; private $third; private $_usedProperties = []; - + /** * @default null * @param ParamConfigurator|mixed $value @@ -26,10 +24,10 @@ public function first($value): self { $this->_usedProperties['first'] = true; $this->first = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|mixed $value @@ -39,10 +37,10 @@ public function second($value): self { $this->_usedProperties['second'] = true; $this->second = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|mixed $value @@ -52,36 +50,35 @@ public function third($value): self { $this->_usedProperties['third'] = true; $this->third = $value; - + return $this; } - + public function __construct(array $value = []) { - if (array_key_exists('first', $value)) { $this->_usedProperties['first'] = true; $this->first = $value['first']; unset($value['first']); } - + if (array_key_exists('second', $value)) { $this->_usedProperties['second'] = true; $this->second = $value['second']; unset($value['second']); } - + if (array_key_exists('third', $value)) { $this->_usedProperties['third'] = true; $this->third = $value['third']; unset($value['third']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -94,7 +91,7 @@ public function toArray(): array if (isset($this->_usedProperties['third'])) { $output['third'] = $this->third; } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValuesConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValuesConfig.php index 1ba307fb491eb..d019ecf81bb76 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValuesConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/NodeInitialValues/Symfony/Config/NodeInitialValuesConfig.php @@ -7,7 +7,6 @@ use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -16,56 +15,55 @@ class NodeInitialValuesConfig implements \Symfony\Component\Config\Builder\Confi private $someCleverName; private $messenger; private $_usedProperties = []; - + public function someCleverName(array $value = []): \Symfony\Config\NodeInitialValues\SomeCleverNameConfig { if (null === $this->someCleverName) { $this->_usedProperties['someCleverName'] = true; $this->someCleverName = new \Symfony\Config\NodeInitialValues\SomeCleverNameConfig($value); - } elseif ([] !== $value) { + } elseif (0 < \func_num_args()) { throw new InvalidConfigurationException('The node created by "someCleverName()" has already been initialized. You cannot pass values the second time you call someCleverName().'); } - + return $this->someCleverName; } - + public function messenger(array $value = []): \Symfony\Config\NodeInitialValues\MessengerConfig { if (null === $this->messenger) { $this->_usedProperties['messenger'] = true; $this->messenger = new \Symfony\Config\NodeInitialValues\MessengerConfig($value); - } elseif ([] !== $value) { + } elseif (0 < \func_num_args()) { throw new InvalidConfigurationException('The node created by "messenger()" has already been initialized. You cannot pass values the second time you call messenger().'); } - + return $this->messenger; } - + public function getExtensionAlias(): string { return 'node_initial_values'; } - + public function __construct(array $value = []) { - if (array_key_exists('some_clever_name', $value)) { $this->_usedProperties['someCleverName'] = true; $this->someCleverName = new \Symfony\Config\NodeInitialValues\SomeCleverNameConfig($value['some_clever_name']); unset($value['some_clever_name']); } - + if (array_key_exists('messenger', $value)) { $this->_usedProperties['messenger'] = true; $this->messenger = new \Symfony\Config\NodeInitialValues\MessengerConfig($value['messenger']); unset($value['messenger']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -75,7 +73,7 @@ public function toArray(): array if (isset($this->_usedProperties['messenger'])) { $output['messenger'] = $this->messenger->toArray(); } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.config.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.config.php index 089252f32f341..8e6b5ae3f90d0 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.config.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.config.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Config\PlaceholdersConfig; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.output.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.output.php index ca27298c368e9..56a5af670807a 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.output.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.output.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + return [ 'enabled' => '%env(bool:FOO_ENABLED)%', 'favorite_float' => '%eulers_number%', diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.php index 6735b5e955675..5d9c680daaced 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Component\Config\Tests\Builder\Fixtures; use Symfony\Component\Config\Definition\Builder\TreeBuilder; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders/Symfony/Config/PlaceholdersConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders/Symfony/Config/PlaceholdersConfig.php index 15fe9b492270d..6b5872c9f0254 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders/Symfony/Config/PlaceholdersConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/Placeholders/Symfony/Config/PlaceholdersConfig.php @@ -2,11 +2,9 @@ namespace Symfony\Config; - use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -16,7 +14,7 @@ class PlaceholdersConfig implements \Symfony\Component\Config\Builder\ConfigBuil private $favoriteFloat; private $goodIntegers; private $_usedProperties = []; - + /** * @default false * @param ParamConfigurator|bool $value @@ -26,10 +24,10 @@ public function enabled($value): self { $this->_usedProperties['enabled'] = true; $this->enabled = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|float $value @@ -39,10 +37,10 @@ public function favoriteFloat($value): self { $this->_usedProperties['favoriteFloat'] = true; $this->favoriteFloat = $value; - + return $this; } - + /** * @param ParamConfigurator|list $value * @return $this @@ -51,41 +49,40 @@ public function goodIntegers($value): self { $this->_usedProperties['goodIntegers'] = true; $this->goodIntegers = $value; - + return $this; } - + public function getExtensionAlias(): string { return 'placeholders'; } - + public function __construct(array $value = []) { - if (array_key_exists('enabled', $value)) { $this->_usedProperties['enabled'] = true; $this->enabled = $value['enabled']; unset($value['enabled']); } - + if (array_key_exists('favorite_float', $value)) { $this->_usedProperties['favoriteFloat'] = true; $this->favoriteFloat = $value['favorite_float']; unset($value['favorite_float']); } - + if (array_key_exists('good_integers', $value)) { $this->_usedProperties['goodIntegers'] = true; $this->goodIntegers = $value['good_integers']; unset($value['good_integers']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -98,7 +95,7 @@ public function toArray(): array if (isset($this->_usedProperties['goodIntegers'])) { $output['good_integers'] = $this->goodIntegers; } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.config.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.config.php index b4498957057c4..fd4c0ce5f2cfa 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.config.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.config.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + use Symfony\Config\PrimitiveTypesConfig; return static function (PrimitiveTypesConfig $config) { diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.output.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.output.php index 366fd5c19f4cb..867e387dbf3c2 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.output.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.output.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + return [ 'boolean_node' => true, 'enum_node' => 'foo', diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.php index 3d36f72bff2db..6ffcf5a4ef533 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Component\Config\Tests\Builder\Fixtures; use Symfony\Component\Config\Definition\Builder\TreeBuilder; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes/Symfony/Config/PrimitiveTypesConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes/Symfony/Config/PrimitiveTypesConfig.php index 8a1be4e46a204..9c56f26d91cf9 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes/Symfony/Config/PrimitiveTypesConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/PrimitiveTypes/Symfony/Config/PrimitiveTypesConfig.php @@ -2,11 +2,9 @@ namespace Symfony\Config; - use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -19,7 +17,7 @@ class PrimitiveTypesConfig implements \Symfony\Component\Config\Builder\ConfigBu private $scalarNode; private $scalarNodeWithDefault; private $_usedProperties = []; - + /** * @default null * @param ParamConfigurator|bool $value @@ -29,10 +27,10 @@ public function booleanNode($value): self { $this->_usedProperties['booleanNode'] = true; $this->booleanNode = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|'foo'|'bar'|'baz' $value @@ -42,10 +40,10 @@ public function enumNode($value): self { $this->_usedProperties['enumNode'] = true; $this->enumNode = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|float $value @@ -55,10 +53,10 @@ public function floatNode($value): self { $this->_usedProperties['floatNode'] = true; $this->floatNode = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|int $value @@ -68,10 +66,10 @@ public function integerNode($value): self { $this->_usedProperties['integerNode'] = true; $this->integerNode = $value; - + return $this; } - + /** * @default null * @param ParamConfigurator|mixed $value @@ -81,10 +79,10 @@ public function scalarNode($value): self { $this->_usedProperties['scalarNode'] = true; $this->scalarNode = $value; - + return $this; } - + /** * @default true * @param ParamConfigurator|mixed $value @@ -94,59 +92,58 @@ public function scalarNodeWithDefault($value): self { $this->_usedProperties['scalarNodeWithDefault'] = true; $this->scalarNodeWithDefault = $value; - + return $this; } - + public function getExtensionAlias(): string { return 'primitive_types'; } - + public function __construct(array $value = []) { - if (array_key_exists('boolean_node', $value)) { $this->_usedProperties['booleanNode'] = true; $this->booleanNode = $value['boolean_node']; unset($value['boolean_node']); } - + if (array_key_exists('enum_node', $value)) { $this->_usedProperties['enumNode'] = true; $this->enumNode = $value['enum_node']; unset($value['enum_node']); } - + if (array_key_exists('float_node', $value)) { $this->_usedProperties['floatNode'] = true; $this->floatNode = $value['float_node']; unset($value['float_node']); } - + if (array_key_exists('integer_node', $value)) { $this->_usedProperties['integerNode'] = true; $this->integerNode = $value['integer_node']; unset($value['integer_node']); } - + if (array_key_exists('scalar_node', $value)) { $this->_usedProperties['scalarNode'] = true; $this->scalarNode = $value['scalar_node']; unset($value['scalar_node']); } - + if (array_key_exists('scalar_node_with_default', $value)) { $this->_usedProperties['scalarNodeWithDefault'] = true; $this->scalarNodeWithDefault = $value['scalar_node_with_default']; unset($value['scalar_node_with_default']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; @@ -168,7 +165,7 @@ public function toArray(): array if (isset($this->_usedProperties['scalarNodeWithDefault'])) { $output['scalar_node_with_default'] = $this->scalarNodeWithDefault; } - + return $output; } diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.config.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.config.php index e7553fc94f17b..d0c6d320709c2 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.config.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.config.php @@ -1,12 +1,31 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + use Symfony\Config\ScalarNormalizedTypesConfig; return static function (ScalarNormalizedTypesConfig $config) { $config ->simpleArray('foo') ->keyedArray('key', 'value') + ->object(true) ->listObject('bar') ->listObject('baz') ->listObject()->name('qux'); + + $config + ->keyedListObject('Foo\\Bar', true) + ->keyedListObject('Foo\\Baz')->settings(['one', 'two']); + + $config->nested([ + 'nested_object' => true, + 'nested_list_object' => ['one', 'two'], + ]); }; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.output.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.output.php index ae84a56709062..9dcf3a9f3d335 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.output.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.output.php @@ -1,13 +1,33 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + return [ 'simple_array' => 'foo', 'keyed_array' => [ - 'key' => 'value' + 'key' => 'value', ], + 'object' => true, 'list_object' => [ 'bar', 'baz', ['name' => 'qux'], ], + 'keyed_list_object' => [ + 'Foo\\Bar' => true, + 'Foo\\Baz' => [ + 'settings' => ['one', 'two'], + ], + ], + 'nested' => [ + 'nested_object' => true, + 'nested_list_object' => ['one', 'two'], + ], ]; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.php index c33edeb4f062e..2c33797427eed 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Component\Config\Tests\Builder\Fixtures; use Symfony\Component\Config\Definition\Builder\TreeBuilder; @@ -26,11 +35,23 @@ public function getConfigTreeBuilder(): TreeBuilder ->prototype('scalar')->end() ->end() ->end() + ->arrayNode('object') + ->addDefaultsIfNotSet() + ->beforeNormalization() + ->ifTrue(function ($v) { return !\is_array($v); }) + ->then(function ($v) { return ['enabled' => $v]; }) + ->end() + ->children() + ->booleanNode('enabled')->defaultNull()->end() + ->scalarNode('date_format')->end() + ->booleanNode('remove_used_context_fields')->end() + ->end() + ->end() ->arrayNode('list_object') ->beforeNormalization() ->always() ->then(function ($values) { - //inspired by Workflow places + // inspired by Workflow places if (isset($values[0]) && \is_string($values[0])) { return array_map(function (string $value) { return ['name' => $value]; @@ -51,19 +72,65 @@ public function getConfigTreeBuilder(): TreeBuilder return array_values($values); }) + ->end() + ->isRequired() + ->requiresAtLeastOneElement() + ->prototype('array') + ->children() + ->scalarNode('name') + ->isRequired() + ->cannotBeEmpty() + ->end() + ->arrayNode('data') + ->normalizeKeys(false) + ->defaultValue([]) + ->prototype('variable')->end() + ->end() ->end() - ->isRequired() - ->requiresAtLeastOneElement() - ->prototype('array') + ->end() + ->end() + ->arrayNode('keyed_list_object') + ->useAttributeAsKey('class') + ->prototype('array') + ->beforeNormalization() + ->ifTrue(function ($v) { return !\is_array($v); }) + ->then(function ($v) { return ['enabled' => $v]; }) + ->end() + ->children() + ->booleanNode('enabled')->defaultTrue()->end() + ->arrayNode('settings') + ->prototype('scalar')->end() + ->end() + ->end() + ->end() + ->end() + ->arrayNode('nested') + ->children() + ->arrayNode('nested_object') + ->addDefaultsIfNotSet() + ->beforeNormalization() + ->ifTrue(function ($v) { return !\is_array($v); }) + ->then(function ($v) { return ['enabled' => $v]; }) + ->end() ->children() - ->scalarNode('name') - ->isRequired() - ->cannotBeEmpty() - ->end() - ->arrayNode('data') - ->normalizeKeys(false) - ->defaultValue([]) - ->prototype('variable') + ->booleanNode('enabled')->defaultNull()->end() + ->end() + ->end() + ->arrayNode('nested_list_object') + ->beforeNormalization() + ->ifTrue(function ($v) { return isset($v[0]) && \is_string($v[0]); }) + ->then(function ($values) { + return array_map(function (string $value) { + return ['name' => $value]; + }, $values); + }) + ->end() + ->prototype('array') + ->children() + ->scalarNode('name') + ->isRequired() + ->cannotBeEmpty() + ->end() ->end() ->end() ->end() diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/KeyedListObjectConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/KeyedListObjectConfig.php new file mode 100644 index 0000000000000..b9f25b224bcc2 --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/KeyedListObjectConfig.php @@ -0,0 +1,74 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * @return $this + */ + public function settings($value): self + { + $this->_usedProperties['settings'] = true; + $this->settings = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('settings', $value)) { + $this->_usedProperties['settings'] = true; + $this->settings = $value['settings']; + unset($value['settings']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['settings'])) { + $output['settings'] = $this->settings; + } + + return $output; + } + +} diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/ListObjectConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/ListObjectConfig.php new file mode 100644 index 0000000000000..969f4685c507d --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/ListObjectConfig.php @@ -0,0 +1,74 @@ +_usedProperties['name'] = true; + $this->name = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * @return $this + */ + public function data($value): self + { + $this->_usedProperties['data'] = true; + $this->data = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('name', $value)) { + $this->_usedProperties['name'] = true; + $this->name = $value['name']; + unset($value['name']); + } + + if (array_key_exists('data', $value)) { + $this->_usedProperties['data'] = true; + $this->data = $value['data']; + unset($value['data']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['name'])) { + $output['name'] = $this->name; + } + if (isset($this->_usedProperties['data'])) { + $output['data'] = $this->data; + } + + return $output; + } + +} diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/Nested/NestedListObjectConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/Nested/NestedListObjectConfig.php new file mode 100644 index 0000000000000..0815c1faaa5e0 --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/Nested/NestedListObjectConfig.php @@ -0,0 +1,52 @@ +_usedProperties['name'] = true; + $this->name = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('name', $value)) { + $this->_usedProperties['name'] = true; + $this->name = $value['name']; + unset($value['name']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['name'])) { + $output['name'] = $this->name; + } + + return $output; + } + +} diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/Nested/NestedObjectConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/Nested/NestedObjectConfig.php new file mode 100644 index 0000000000000..279652138872e --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/Nested/NestedObjectConfig.php @@ -0,0 +1,52 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + + return $output; + } + +} diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/NestedConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/NestedConfig.php new file mode 100644 index 0000000000000..5774fdbb83821 --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/NestedConfig.php @@ -0,0 +1,88 @@ +_usedProperties['nestedObject'] = true; + $this->nestedObject = $value; + + return $this; + } + + if (!$this->nestedObject instanceof \Symfony\Config\ScalarNormalizedTypes\Nested\NestedObjectConfig) { + $this->_usedProperties['nestedObject'] = true; + $this->nestedObject = new \Symfony\Config\ScalarNormalizedTypes\Nested\NestedObjectConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "nestedObject()" has already been initialized. You cannot pass values the second time you call nestedObject().'); + } + + return $this->nestedObject; + } + + /** + * @return \Symfony\Config\ScalarNormalizedTypes\Nested\NestedListObjectConfig|$this + */ + public function nestedListObject($value = []) + { + $this->_usedProperties['nestedListObject'] = true; + if (!\is_array($value)) { + $this->nestedListObject[] = $value; + + return $this; + } + + return $this->nestedListObject[] = new \Symfony\Config\ScalarNormalizedTypes\Nested\NestedListObjectConfig($value); + } + + public function __construct(array $value = []) + { + if (array_key_exists('nested_object', $value)) { + $this->_usedProperties['nestedObject'] = true; + $this->nestedObject = \is_array($value['nested_object']) ? new \Symfony\Config\ScalarNormalizedTypes\Nested\NestedObjectConfig($value['nested_object']) : $value['nested_object']; + unset($value['nested_object']); + } + + if (array_key_exists('nested_list_object', $value)) { + $this->_usedProperties['nestedListObject'] = true; + $this->nestedListObject = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\ScalarNormalizedTypes\Nested\NestedListObjectConfig($v) : $v; }, $value['nested_list_object']); + unset($value['nested_list_object']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['nestedObject'])) { + $output['nested_object'] = $this->nestedObject instanceof \Symfony\Config\ScalarNormalizedTypes\Nested\NestedObjectConfig ? $this->nestedObject->toArray() : $this->nestedObject; + } + if (isset($this->_usedProperties['nestedListObject'])) { + $output['nested_list_object'] = array_map(function ($v) { return $v instanceof \Symfony\Config\ScalarNormalizedTypes\Nested\NestedListObjectConfig ? $v->toArray() : $v; }, $this->nestedListObject); + } + + return $output; + } + +} diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/ObjectConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/ObjectConfig.php new file mode 100644 index 0000000000000..74d0b6ee9bb3d --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypes/ObjectConfig.php @@ -0,0 +1,98 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function dateFormat($value): self + { + $this->_usedProperties['dateFormat'] = true; + $this->dateFormat = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function removeUsedContextFields($value): self + { + $this->_usedProperties['removeUsedContextFields'] = true; + $this->removeUsedContextFields = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('date_format', $value)) { + $this->_usedProperties['dateFormat'] = true; + $this->dateFormat = $value['date_format']; + unset($value['date_format']); + } + + if (array_key_exists('remove_used_context_fields', $value)) { + $this->_usedProperties['removeUsedContextFields'] = true; + $this->removeUsedContextFields = $value['remove_used_context_fields']; + unset($value['remove_used_context_fields']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['dateFormat'])) { + $output['date_format'] = $this->dateFormat; + } + if (isset($this->_usedProperties['removeUsedContextFields'])) { + $output['remove_used_context_fields'] = $this->removeUsedContextFields; + } + + return $output; + } + +} diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypesConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypesConfig.php new file mode 100644 index 0000000000000..5ba2f1112ba10 --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes/Symfony/Config/ScalarNormalizedTypesConfig.php @@ -0,0 +1,194 @@ + $value + * @return $this + */ + public function simpleArray($value): self + { + $this->_usedProperties['simpleArray'] = true; + $this->simpleArray = $value; + + return $this; + } + + /** + * @param ParamConfigurator|array $value + * @return $this + */ + public function keyedArray(string $name, $value): self + { + $this->_usedProperties['keyedArray'] = true; + $this->keyedArray[$name] = $value; + + return $this; + } + + /** + * @return \Symfony\Config\ScalarNormalizedTypes\ObjectConfig|$this + */ + public function object($value = []) + { + if (!\is_array($value)) { + $this->_usedProperties['object'] = true; + $this->object = $value; + + return $this; + } + + if (!$this->object instanceof \Symfony\Config\ScalarNormalizedTypes\ObjectConfig) { + $this->_usedProperties['object'] = true; + $this->object = new \Symfony\Config\ScalarNormalizedTypes\ObjectConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "object()" has already been initialized. You cannot pass values the second time you call object().'); + } + + return $this->object; + } + + /** + * @return \Symfony\Config\ScalarNormalizedTypes\ListObjectConfig|$this + */ + public function listObject($value = []) + { + $this->_usedProperties['listObject'] = true; + if (!\is_array($value)) { + $this->listObject[] = $value; + + return $this; + } + + return $this->listObject[] = new \Symfony\Config\ScalarNormalizedTypes\ListObjectConfig($value); + } + + /** + * @return \Symfony\Config\ScalarNormalizedTypes\KeyedListObjectConfig|$this + */ + public function keyedListObject(string $class, $value = []) + { + if (!\is_array($value)) { + $this->_usedProperties['keyedListObject'] = true; + $this->keyedListObject[$class] = $value; + + return $this; + } + + if (!isset($this->keyedListObject[$class]) || !$this->keyedListObject[$class] instanceof \Symfony\Config\ScalarNormalizedTypes\KeyedListObjectConfig) { + $this->_usedProperties['keyedListObject'] = true; + $this->keyedListObject[$class] = new \Symfony\Config\ScalarNormalizedTypes\KeyedListObjectConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "keyedListObject()" has already been initialized. You cannot pass values the second time you call keyedListObject().'); + } + + return $this->keyedListObject[$class]; + } + + public function nested(array $value = []): \Symfony\Config\ScalarNormalizedTypes\NestedConfig + { + if (null === $this->nested) { + $this->_usedProperties['nested'] = true; + $this->nested = new \Symfony\Config\ScalarNormalizedTypes\NestedConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "nested()" has already been initialized. You cannot pass values the second time you call nested().'); + } + + return $this->nested; + } + + public function getExtensionAlias(): string + { + return 'scalar_normalized_types'; + } + + public function __construct(array $value = []) + { + if (array_key_exists('simple_array', $value)) { + $this->_usedProperties['simpleArray'] = true; + $this->simpleArray = $value['simple_array']; + unset($value['simple_array']); + } + + if (array_key_exists('keyed_array', $value)) { + $this->_usedProperties['keyedArray'] = true; + $this->keyedArray = $value['keyed_array']; + unset($value['keyed_array']); + } + + if (array_key_exists('object', $value)) { + $this->_usedProperties['object'] = true; + $this->object = \is_array($value['object']) ? new \Symfony\Config\ScalarNormalizedTypes\ObjectConfig($value['object']) : $value['object']; + unset($value['object']); + } + + if (array_key_exists('list_object', $value)) { + $this->_usedProperties['listObject'] = true; + $this->listObject = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\ScalarNormalizedTypes\ListObjectConfig($v) : $v; }, $value['list_object']); + unset($value['list_object']); + } + + if (array_key_exists('keyed_list_object', $value)) { + $this->_usedProperties['keyedListObject'] = true; + $this->keyedListObject = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\ScalarNormalizedTypes\KeyedListObjectConfig($v) : $v; }, $value['keyed_list_object']); + unset($value['keyed_list_object']); + } + + if (array_key_exists('nested', $value)) { + $this->_usedProperties['nested'] = true; + $this->nested = new \Symfony\Config\ScalarNormalizedTypes\NestedConfig($value['nested']); + unset($value['nested']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['simpleArray'])) { + $output['simple_array'] = $this->simpleArray; + } + if (isset($this->_usedProperties['keyedArray'])) { + $output['keyed_array'] = $this->keyedArray; + } + if (isset($this->_usedProperties['object'])) { + $output['object'] = $this->object instanceof \Symfony\Config\ScalarNormalizedTypes\ObjectConfig ? $this->object->toArray() : $this->object; + } + if (isset($this->_usedProperties['listObject'])) { + $output['list_object'] = array_map(function ($v) { return $v instanceof \Symfony\Config\ScalarNormalizedTypes\ListObjectConfig ? $v->toArray() : $v; }, $this->listObject); + } + if (isset($this->_usedProperties['keyedListObject'])) { + $output['keyed_list_object'] = array_map(function ($v) { return $v instanceof \Symfony\Config\ScalarNormalizedTypes\KeyedListObjectConfig ? $v->toArray() : $v; }, $this->keyedListObject); + } + if (isset($this->_usedProperties['nested'])) { + $output['nested'] = $this->nested->toArray(); + } + + return $output; + } + +} diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.config.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.config.php index 10b70bf6d26f9..ed65c1f2c36cb 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.config.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.config.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + use Symfony\Config\VariableTypeConfig; return static function (VariableTypeConfig $config) { diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.output.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.output.php index 87c38a584a28a..71ef3f426a98a 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.output.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.output.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + return [ 'any_value' => 'foobar', ]; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.php index c3fa62cfd9e49..11a8bea6f8674 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Component\Config\Tests\Builder\Fixtures; use Symfony\Component\Config\Definition\Builder\TreeBuilder; diff --git a/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType/Symfony/Config/VariableTypeConfig.php b/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType/Symfony/Config/VariableTypeConfig.php index a36bf5f31c966..078226d25946f 100644 --- a/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType/Symfony/Config/VariableTypeConfig.php +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/VariableType/Symfony/Config/VariableTypeConfig.php @@ -2,11 +2,9 @@ namespace Symfony\Config; - use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; - /** * This class is automatically generated to help in creating a config. */ @@ -14,7 +12,7 @@ class VariableTypeConfig implements \Symfony\Component\Config\Builder\ConfigBuil { private $anyValue; private $_usedProperties = []; - + /** * @default null * @param ParamConfigurator|mixed $value @@ -24,36 +22,35 @@ public function anyValue($value): self { $this->_usedProperties['anyValue'] = true; $this->anyValue = $value; - + return $this; } - + public function getExtensionAlias(): string { return 'variable_type'; } - + public function __construct(array $value = []) { - if (array_key_exists('any_value', $value)) { $this->_usedProperties['anyValue'] = true; $this->anyValue = $value['any_value']; unset($value['any_value']); } - + if ([] !== $value) { throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); } } - + public function toArray(): array { $output = []; if (isset($this->_usedProperties['anyValue'])) { $output['any_value'] = $this->anyValue; } - + return $output; } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy