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 920f12104f3a6..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().\'); } - 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().\'); + } + + 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\'])' + ; } } @@ -435,8 +510,7 @@ private function buildConstructor(ClassBuilder $class): void $class->addMethod('__construct', ' public function __construct(array $value = []) -{ -'.$body.' +{'.$body.' }'); } @@ -467,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 78baa477355e7..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; @@ -15,7 +24,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/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 new file mode 100644 index 0000000000000..d0c6d320709c2 --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.config.php @@ -0,0 +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 new file mode 100644 index 0000000000000..9dcf3a9f3d335 --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.output.php @@ -0,0 +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', + ], + '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 new file mode 100644 index 0000000000000..2c33797427eed --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Builder/Fixtures/ScalarNormalizedTypes.php @@ -0,0 +1,144 @@ + + * + * 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; +use Symfony\Component\Config\Definition\ConfigurationInterface; + +class ScalarNormalizedTypes implements ConfigurationInterface +{ + public function getConfigTreeBuilder(): TreeBuilder + { + $tb = new TreeBuilder('scalar_normalized_types'); + $rootNode = $tb->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('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 + 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() + ->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() + ->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() + ->end() + ->end() + ->end() + ; + + return $tb; + } +} 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; } 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',