/** * Invoke the ViewHelper described by the ViewHelperNode, the properties * of which will already have been filled by the ViewHelperResolver. * * @param string|ViewHelperInterface $viewHelperClassName * @param array $arguments * @param RenderingContextInterface $renderingContext * @param \Closure $renderChildrenClosure * @return mixed */ public function invoke($viewHelperClassNameOrInstance, array $arguments, RenderingContextInterface $renderingContext, \Closure $renderChildrenClosure = NULL) { if ($viewHelperClassNameOrInstance instanceof ViewHelperInterface) { $viewHelper = $viewHelperClassNameOrInstance; } else { $viewHelper = $this->viewHelperResolver->createViewHelperInstanceFromClassName($viewHelperClassNameOrInstance); } $expectedViewHelperArguments = $renderingContext->getViewHelperResolver()->getArgumentDefinitionsForViewHelper($viewHelper); // Rendering process $evaluatedArguments = array(); foreach ($expectedViewHelperArguments as $argumentName => $argumentDefinition) { if (isset($arguments[$argumentName])) { /** @var NodeInterface|mixed $argumentValue */ $argumentValue = $arguments[$argumentName]; $evaluatedArguments[$argumentName] = $argumentValue instanceof NodeInterface ? $argumentValue->evaluate($renderingContext) : $argumentValue; } else { $evaluatedArguments[$argumentName] = $argumentDefinition->getDefaultValue(); } } $this->abortIfUnregisteredArgumentsExist($expectedViewHelperArguments, $evaluatedArguments); $this->abortIfRequiredArgumentsAreMissing($expectedViewHelperArguments, $evaluatedArguments); $viewHelper->setArguments($evaluatedArguments); $viewHelper->setRenderingContext($renderingContext); if ($renderChildrenClosure) { $viewHelper->setRenderChildrenClosure($renderChildrenClosure); } return $viewHelper->initializeArgumentsAndRender(); }
/** * Public such that it is callable from within closures * * @param integer $uniqueCounter * @param RenderingContextInterface $renderingContext * @param string $viewHelperName * @return AbstractViewHelper */ public function getViewHelper($uniqueCounter, RenderingContextInterface $renderingContext, $viewHelperName) { return $renderingContext->getViewHelperResolver()->createViewHelperInstanceFromClassName($viewHelperName); }