ewb:iterator.explode(glue: 'constant:LF')} * * * {as} * */ class ExplodeViewHelper extends AbstractViewHelper { use CompileWithRenderStatic; protected static string $method = 'explode'; public function initializeArguments(): void { $this->registerArgument( 'as', 'string', 'Template variable name to assign; if not specified the ViewHelper returns the variable instead.' ); $this->registerArgument('content', 'string', 'String to be exploded by glue'); $this->registerArgument( 'glue', 'string', 'String used as glue in the string to be exploded. Use glue value of "constant:NAMEOFCONSTANT" ' . '(fx "constant:LF" for linefeed as glue)', false, ',' ); } public static function renderStatic( array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext ): mixed { $content = $arguments['content'] ?? $renderChildrenClosure(); $glue = static::resolveGlue($arguments); $content = call_user_func_array(static::$method, [$glue, $content]); $as = $arguments['as']; if (true === empty($as)) { $output = $content; } else { $templateVariableContainer = $renderingContext->getVariableProvider(); $templateVariableContainer->add($as, $content); $output = $renderChildrenClosure(); $templateVariableContainer->remove($as); } return $output; } protected static function resolveGlue(array $arguments): string { $glue = $arguments['glue']; if (false !== strpos($glue, ':') && 1 < strlen($glue)) { // glue contains a special type identifier, resolve the actual glue list ($type, $value) = explode(':', $glue); switch ($type) { case 'constant': $glue = constant($value); break; default: $glue = $value; } } return $glue; } }