Пример #1
0
 /**
  * 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);
 }