/** * 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)); } }
/** * 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')); }); } }