/**
  * Renders view layout.
  *
  * @param GetResponseForControllerResultEvent $event
  * @param string                              $name
  * @param EventDispatcherInterface            $dispatcher
  */
 public function onKernelView(GetResponseForControllerResultEvent $event, $name, EventDispatcherInterface $dispatcher)
 {
     $request = $event->getRequest();
     $result = $event->getControllerResult();
     if (null !== ($template = $request->attributes->get('_response[value]', null, true)) and null === $result || is_array($result)) {
         $response = $result = $this->view->render($template, $result ?: []);
     }
     if ($layout = $request->attributes->get('_response[layout]', null, true) or null === $layout && ($layout = $this->view->getLayout())) {
         $this->view->getSections()->set('content', (string) $result);
         $dispatcher->dispatch('view.layout', $e = new LayoutEvent($layout));
         $response = $this->view->render($e->getLayout(), $e->getParameters());
     }
     if (isset($response)) {
         $event->setResponse(new Response($response));
     }
 }
Exemple #2
0
 /**
  * Adds section renderer.
  *
  * @param SectionManager $sections
  * @param ViewInterface  $view
  */
 public function registerRenderer(SectionManager $sections, ViewInterface $view)
 {
     foreach ($this->getConfig('renderer', []) as $name => $template) {
         $sections->addRenderer($name, function ($name, $value, $options = []) use($template, $view) {
             return $view->render($template, compact('name', 'value', 'options'));
         });
     }
 }