diff --git a/src/ViewHelpers/VariableViewHelper.php b/src/ViewHelpers/VariableViewHelper.php index d3a636c93..e889e3cde 100644 --- a/src/ViewHelpers/VariableViewHelper.php +++ b/src/ViewHelpers/VariableViewHelper.php @@ -30,6 +30,8 @@ * some value * {oldvariable -> f:format.htmlspecialchars() -> f:variable(name: 'newvariable')} * {oldvariable} + * {f:variable(name: 'myarray.mykey.mydeeperkey', value: 'some value')} + * some value * * @see \TYPO3Fluid\Fluid\ViewHelpers\IfViewHelper * @api @@ -55,6 +57,29 @@ public static function renderStatic( RenderingContextInterface $renderingContext ) { $value = $renderChildrenClosure(); - $renderingContext->getVariableProvider()->add($arguments['name'], $value); + + if (!str_contains($arguments['name'], '.')) { + $renderingContext->getVariableProvider()->add($arguments['name'], $value); + return; + } + + $seperated = explode('.', $arguments['name']); + + $name = $seperated[0]; + $keys = array_slice($seperated,1); + + $object = $renderingContext->getVariableProvider()->get($name) ?: []; + + $current = &$object; + foreach ($keys as $keySegment) { + if (!isset($current[$keySegment]) || !is_array($current[$keySegment])) { + $current[$keySegment] = []; + } + $current = &$current[$keySegment]; + } + $current = $value; + unset($current); + + $renderingContext->getVariableProvider()->add($name, $object); } }