Exemple #1
0
 /**
  * Render the passed $renderable and return the rendered Renderable.
  *
  * @param \Neos\Form\Core\Model\Renderable\RootRenderableInterface $renderable
  * @return string the rendered $renderable
  * @throws \Neos\Form\Exception\RenderingException
  * @api
  */
 public function renderRenderable(\Neos\Form\Core\Model\Renderable\RootRenderableInterface $renderable)
 {
     $renderable->beforeRendering($this->formRuntime);
     $renderableType = $renderable->getType();
     if ($renderable->getRendererClassName() !== null && $renderable->getRendererClassName() !== get_class($this)) {
         $rendererClassName = $renderable->getRendererClassName();
         $renderer = new $rendererClassName();
         if (!$renderer instanceof RendererInterface) {
             throw new \Neos\Form\Exception\RenderingException(sprintf('The renderer class "%s" for "%s" does not implement RendererInterface.', $rendererClassName, $renderableType), 1326098022);
         }
         $renderer->setControllerContext($this->controllerContext);
         $renderer->setFormRuntime($this->formRuntime);
         return $renderer->renderRenderable($renderable);
     }
     $renderingOptions = $renderable->getRenderingOptions();
     $renderablePathAndFilename = $this->getPathAndFilenameForRenderable($renderableType, $renderingOptions);
     $parsedRenderable = $this->getParsedRenderable($renderable->getType(), $renderablePathAndFilename);
     $currentTemplatePathsResolver = $this->getTemplatePaths();
     $newTemplatePathsResolver = $this->createTemplatePathsResolverWithRenderingOptions($renderingOptions);
     $this->baseRenderingContext->setTemplatePaths($newTemplatePathsResolver);
     isset($renderingOptions['templatePathPattern']);
     if ($this->getCurrentRenderingContext() === null) {
         // We do not have a "current" rendering context yet, so we use the base rendering context
         $this->baseRenderingContext->setControllerContext($this->controllerContext);
         $renderingContext = $this->baseRenderingContext;
     } else {
         $renderingContext = clone $this->getCurrentRenderingContext();
     }
     $renderingContext->getViewHelperVariableContainer()->addOrUpdate(FluidFormRenderer::class, 'currentRenderable', $renderable);
     if (!isset($renderingOptions['renderableNameInTemplate'])) {
         throw new \Neos\Form\Exception\RenderingException(sprintf('The Renderable "%s" did not have the rendering option "renderableNameInTemplate" defined.', $renderableType), 1326094948);
     }
     $templateVariableContainer = new TemplateVariableContainer(array($renderingOptions['renderableNameInTemplate'] => $renderable));
     $renderingContext->setVariableProvider($templateVariableContainer);
     if ($parsedRenderable->hasLayout()) {
         $renderableLayoutName = $parsedRenderable->getLayoutName($renderingContext);
         $renderableLayoutPathAndFilename = $this->getPathAndFilenameForRenderableLayout($renderableLayoutName, $renderingOptions);
         $parsedLayout = $this->getParsedRenderable($renderableLayoutName, $renderableLayoutPathAndFilename);
         $this->startRendering(self::RENDERING_LAYOUT, $parsedRenderable, $renderingContext);
         $output = $parsedLayout->render($renderingContext);
         $this->stopRendering();
     } else {
         $this->startRendering(self::RENDERING_TEMPLATE, $parsedRenderable, $renderingContext);
         $output = $parsedRenderable->render($renderingContext);
         $this->stopRendering();
     }
     $this->baseRenderingContext->setTemplatePaths($currentTemplatePathsResolver);
     return $output;
 }