From 06ceb81c9199fe5eabf9c15ce5f13883f8484e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Bj=C3=B8rnskov?= Date: Thu, 22 Dec 2011 17:12:56 +0100 Subject: [PATCH] StreamedResponse --- Configuration/Template.php | 23 +++++++++++++++++++++++ EventListener/TemplateListener.php | 14 +++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/Configuration/Template.php b/Configuration/Template.php index 21e7707d..475f7858 100644 --- a/Configuration/Template.php +++ b/Configuration/Template.php @@ -42,6 +42,13 @@ class Template extends ConfigurationAnnotation */ protected $vars = array(); + /** + * Should the template be streamed? + * + * @var Boolean + */ + protected $isStreamable = false; + /** * Returns the array of templates variables. * @@ -52,6 +59,22 @@ public function getVars() return $this->vars; } + /** + * @param Boolean $streamable + */ + public function setIsStreamable($streamable) + { + $this->streamable = $streamable; + } + + /** + * @return Boolean + */ + public function isStreamable() + { + return (Boolean) $this->streamable; + } + /** * Sets the template variables * diff --git a/EventListener/TemplateListener.php b/EventListener/TemplateListener.php index a0d584a1..3c03becd 100644 --- a/EventListener/TemplateListener.php +++ b/EventListener/TemplateListener.php @@ -6,6 +6,7 @@ use Symfony\Component\HttpKernel\Event\FilterControllerEvent; use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\StreamedResponse; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; /* @@ -64,6 +65,7 @@ public function onKernelController(FilterControllerEvent $event) $request->attributes->set('_template', $configuration->getTemplate()); $request->attributes->set('_template_vars', $configuration->getVars()); + $request->attribytes->set('_template_streamable', $configuration->isStreamable()); // all controller method arguments if (!$configuration->getVars()) { @@ -88,6 +90,7 @@ public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); $parameters = $event->getControllerResult(); + $templating = $this->container->get('templating'); if (null === $parameters) { if (!$vars = $request->attributes->get('_template_vars')) { @@ -110,6 +113,15 @@ public function onKernelView(GetResponseForControllerResultEvent $event) return $parameters; } - $event->setResponse(new Response($this->container->get('templating')->render($template, $parameters))); + if (!$request->attributes->get('_template_streamable')) { + $event->setResponse($templating->renderResponse($template, $parameters)); + } else { + $callback = function () use ($templating, $template, $parameters) { + return $templating->stream($template, $parameters); + }; + + + $event->setResponse(new StreamedResponse($callback)); + } } }