* .... * * * fixed flexform data for extbase controller * * * @api */ class FlexFormViewHelper extends AbstractViewHelper { use CompileWithRenderStatic; /** * @var boolean */ protected $escapeOutput = false; public function initializeArguments() { parent::initializeArguments(); $this->registerArgument('data', 'array', 'Array to get flex form data from', true); $this->registerArgument('fieldName', 'string', 'Field name', false, 'pi_flexform'); $this->registerArgument('as', 'string', 'Name of the variable to assign', false, 'flexFormData'); } /** * @param array $arguments * @param \Closure $renderChildrenClosure * @param RenderingContextInterface $renderingContext * * @return array */ public static function renderStatic( array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext ) { $data = []; if (is_array($arguments['data'])) { if (isset($arguments['data'][$arguments['fieldName']])) { $data = is_array($arguments['data'][$arguments['fieldName']]) ? $arguments['data'][$arguments['fieldName']] : GeneralUtility::xml2array($arguments['data'][$arguments['fieldName']]); $data = $data['data'] ?? $data; } } $templateVariableContainer = $renderingContext->getVariableProvider(); $templateVariableContainer->add($arguments['as'], $data); $content = $renderChildrenClosure(); $templateVariableContainer->remove($arguments['as']); return $content; } }